2016-04-19 12 views
0

私はfswatchを使用してディレクトリの変更を追跡していますが、特定のファイル(ワイルドカード付き)が存在する場合はこのプロセスを停止します。この特定のファイルは、別のプロセス(追跡が必要な変更を生成している)によって、別のディレクトリ(追跡されたディレクトリにない)で作成されます。ここでファイルが存在する場合、フォルダの変更を監視しない(bash)

は私がしようとしたものです:

while [[ $(shopt -s nullglob; set -- "${file_to_check}"; echo $#) -eq 1 ]]; do 
    fswatch "${path_to_the_tracked_directory}" 
done && echo "Done" 

しかし、このスクリプトは${file_to_check}表示されたら終了しません。

状態で複合ビットあたりのようにワイルドカードの世話をすることである。Bash check if file exists with double bracket test and wildcards

EDIT:

複合ビットに簡略化することができる。

while [ $(set -- "${path_to_the_file_to_check}"${file_to_check_with_wildcards}; echo $#) -eq 0 ]; do 
    fswatch "${path_to_the_tracked_directory}" 
done && echo "Done" 
+0

コードがように見えます。 'set --'の後ろにスペースが必要です – tripleee

+0

また、パターンを二重引用符で囲むと、' while! [-f "$ file_to_check"] ' - あなたがリンクしているコードは、ワイルドカードが0または複数ではなく、1つのファイルと正確に一致するかどうかをチェックするためのものです。単一の静的なファイル名とワイルドカードを使用しないと、明らかに深刻な過度の攻撃です。 – tripleee

+0

@ tripleee:ありがとう、実際に私の最初の試みは 'while [! -f "$ {file_to_check}"] 'を実行しますが、ワイルドカードでは動作しません。 – econ

答えて

0

一つの解決策を使用することです(https://github.com/emcrisostomo/fswatch/wiki/How-to-Use-fswatch)。あなたが間違ったコードを転写している

while [ $(set -- "${path_to_the_file_to_check}"${file_to_check_with_wildcards}; echo $#) -eq 0 ]; do 
     fswatch -1 "${path_to_the_tracked_directory}" 
done && echo "Done" 
関連する問題