web-dev-qa-db-ja.com

デフォルトで特定のディレクトリの下に作成されたすべてのファイルに対する実行許可

デフォルトでspecificディレクトリの下に作成されたすべてのファイルに実行許可を与える方法があるかどうかを知りたいです。

すなわち、

ディレクトリfooscriptsの下にfoo.shというファイルを作成すると、デフォルトで実行許可が必要になります。ただし、fooscriptsの外部に同じファイルを作成する場合は、通常どおりです。

3
Severus Tux

Inotifywaitを使用する

前述のように、inotify-toolsinotifywait)を使用して、たとえば以下のスクリプトによって特定のディレクトリの変更を監視し、その後新しいファイルを再帰的に実行可能に設定できます。

スクリプトは、inotifywait-コマンドを使用します。これは、-e-オプションで設定された特定のeventsによってトリガーされます。幸いなことに、このコマンドは複数のイベントタイプと組み合わせて使用​​できます。
ディレクトリ内のファイルを実行可能にするため、スクリプトでは2つのイベントが設定されます。

-e move

ファイルに気づくmovedディレクトリに、そして

-e create

これにより、ディレクトリ内に新しいファイル作成済みが表示されます。

さらに、オプション:

-m -r 

コマンドを無期限に(「モニター」)実行し、ディレクトリ内で再帰的に実行します。

--format '%w%f'

イベントを引き起こしたディレクトリ(ファイルへのパス、%w)とファイル名(%f)を出力します。


inotifywaitのオプションの詳細は here で見つけることができます。または、いつものようにman inotifywait

スクリプト

#!/bin/sh
# you might want to change the directory below into the targeted directory
DIR="/home/jacob/Bureaublad/test123"
inotifywait -m -r -e move -e create --format '%w%f' "$DIR" | while read f

do
  chmod +x "$f"
done

使い方

  1. おそらく最初にinotify-toolsをインストールする必要があります:

    Sudo apt-get install inotify-tools
    
  2. スクリプトを空のファイルにコピーし、set_executable.shとして保存します

  3. スクリプトの先頭で、ターゲットフォルダーへのパスを設定します。

    # change the directory below into the targeted directory
    DIR="/home/jacob/Bureaublad/test123"
    

    ...そして端末からスクリプトをテスト実行します。

  4. すべて正常に機能する場合は、スクリプトをスタートアップアプリケーションに追加します:[ダッシュ]> [スタートアップアプリケーション]> [追加]。

注意

notifywaitchanges(イベント)に作用することに注意してください。これは、追加または作成されたファイルbeforeが実行されたスクリプトは影響を受けないことを意味します。また、ターゲットディレクトリ内にある間に手動で故意にファイルを実行可能に設定した場合、notが実行可能ファイルを再設定することもありません。

3
Jacob Vlijm

いいえ。inotifyを使用してディレクトリとchmod新しいファイルを監視できます。

inotifyについて調べる方法は次のとおりです。

man -k inotify
for i in $( man -k inotify | awk '{ print $1 }' ) ; do 
    man $i 
    read -p "Print?: " ans 
    if [[ "x$ans" = "xy" ]] ; then 
        man -t $i | lpr -J $i 
    fi 
done
# sr is from surfraw, Shell Users Revoultionary Front Rage Against the Web
sr google inotify
1
waltinator