11

ディレクトリの下にあるすべての.jsファイルinotifywaitを監視するために使用しようとしています。次のコマンド内で正規表現をフォーマットするにはどうすればよいですか?~/js

$ inotifywait -m -r --exclude [REGEX HERE] ~/js

正規表現(マニュアルページによると、POSIX拡張正規表現である必要があります)は、「。 jsで終わるファイルを除くすべてのファイル」と一致する必要があるため、これらのファイルはオプションで除外--excludeできます。

(?!)ルックアラウンドを試しましたが、この場合は機能しないようです。アイデアや回避策はありますか?この問題についてご協力いただければ幸いです。

4

6 に答える 6

9

私は(?!)のことを試しました

これはネガティブ先読みと呼ばれ、POSIXEREではサポートされていません。

したがって、それを難し​​い方法で行う必要があります。つまり、除外するすべてのものに一致させる必要があります。

例えば

\.(txt|xml)

于 2011-10-30T06:00:26.963 に答える
8

inotifywaitincludeオプションはなく、POSIX拡張正規表現は否定をサポートしていません。(FailedDevによる回答)

inotifyツールにパッチを適用して--includeオプションを取得できます。ただし、自分でコンパイルして保守する必要があります。(browndavによる回答)

より迅速な回避策は、を使用することgrepです。

$ inotifywait -m -r ~/js | grep '\.js$'

ただし、出力を別のコマンドにパイプする場合は、grepのバッファリングに注意してください。--line-bufferedで動作するように追加しwhile readます。次に例を示します。

$ inotifywait -m -r ~/js | grep '\.js$' --line-buffered |
    while read path events file; do
      echo "$events happened to $file in $path"
    done

既存のファイルを監視したいだけの場合は、を使用findしてファイルのリストを生成することもできます。新しく作成されたファイルは監視されません。

$ find ~/js -name '*.js' | xargs inotifywait -m

すべてのファイルが1つのディレクトリにある場合は、ostrokachの提案を使用することもできます。その場合、シェルの拡張はfindやxargsよりもはるかに簡単です。ただし、ここでも、新しく作成されたファイルは監視されません。

$ inotifywait -m ~/js/*.js
于 2016-07-10T04:22:56.190 に答える
4

--excludeと--excludeiの否定のように機能する--includeオプションと--includeiオプションを追加するパッチをここに投稿しました。

https://github.com/browndav/inotify-tools/commit/160bc09c7b8e78493e55fc9f071d0c5575496429

明らかに、inotifytoolsを再構築する必要があり、これは比較的テストされていませんが、メインラインに組み込まれるか、後でこの投稿に出くわす人に役立つことを願っています。

于 2013-10-18T17:28:44.863 に答える
2

--includeバージョン3.20.1の時点で、inotifywaitにはとオプションが含まれてい--includeiます。

それらを表示するには、を実行しますinotifywait --help。何らかの理由で、それらはマンページに文書化されていません。

于 2019-09-09T18:26:55.937 に答える
1

シェル関連の文字(を含む)を使用している場合は、必ずregexコマンドを引用符で囲んでください()

これが機能している間:

inotifywait --exclude \.pyc .

これではありません:

inotifywait --exclude (\.pyc|~) .

正規表現全体を引用する必要があります。

inotifywait --exclude '.*(\.pyc|~)' .
于 2016-02-03T08:46:13.140 に答える
1

ファイル名またはパスのある時点で--exclude '\.[^j][^s]'ファイルが含まれていない限り、ファイルを無視することで、このほとんどを取得できます。.jsと組み合わせると-r、任意のレベルのネストで機能します。

唯一の欠点は、のようなファイル名test.js.oldが引き続き監視され、呼び出されたディレクトリ内のすべてのファイルexample.js/も監視されることですが、これはおそらく多少ありそうにありません。

おそらくこの正規表現を拡張してこれを修正することもできますが、個人的には、欠点が心配するほど大きなものではないと思います。

于 2016-08-31T03:20:40.227 に答える