この投稿は更新されています。解決策については以下をご覧ください。
常に存在するとは限らないファイルの存在についてフォルダーを確認する必要があります。
私は次のようなスクリプトを作成しました:
#!/ビン/sh 真の間; 行う file=/パス/to/ファイル if [[ "$file" = *ファイル名* ]] それから echo "$ファイルが存在します" そうしないと echo "存在しません" フィ 睡眠 3 終わり
ファイルを削除または移動するまで、「$ file is present」が継続的に繰り返されるという事実を除いて、完全に機能します。"echo "$file is present" の後に挿入してアラートを停止し、このファイルのチェックを続行するには、どのコマンドを使用できますか (たとえば、ファイルが再び利用可能になったとき)。
ありがとうございました。
8時間まで回答を追加できないため、ここに私の解決策を投稿します:
とにかく、私はこのスクリプトを使用して解決しました:ファイルの時間を現在の日付と比較し、「タッチ」を使用して日付を10秒前に変更します:
#!/ビン/sh
真実でありながら
行う
cd $(dirname "$0")
current=$(pwd)
cd /ブート/ホーム/ダウンロード
last=$(ls -t | head -n1)
name=$(basename "$last")
filedate=$(date -r "$last" +%G%m%d%H%M%S)
currentdate=$(date +%G%m%d%H%M%S)
if [ "$filedate" -eq "$currentdate" ]
それから
echo "$name" "存在します"
touch -d '-10 秒' "$name"
フィ
終わり
ファイル名に関係なく、尊敬され、独立して動作するようになりました! すべての新しいファイルについて一度だけ警告し、そのフォルダーを監視し続けます:-)
スクリプトの全履歴を保持するために、以下に iamauser のスクリプトがあります。私はこのスクリプトを少し改良しました: フォルダ内のすべての新しいファイル (名前、種類などから独立して) について警告し、削除されたファイルについても警告します:-)
#!/ビン/バッシュ
cd /ブート/ホーム
filename=$(ls -t | head -n1)
tstamp=$(stat --print "%Y" "$filename")
真の間; 行う
prev=$(ls "/boot/home/Downloads" | tr '\n' '\n' > /tmp/prev.txt)
check=$(ls -t /boot/home/Downloads | head -n1)
もしも [ !-d "$ファイル名" ]; それから
after=$(ls "/boot/home/Downloads" | tr '\n' '\n' > /tmp/after.txt)
echo "存在しません";
睡眠 5;
elif [[ "$filename" == "$filename" && $tstamp -ne $(stat --print "%Y" "$filename") ]]; それから
睡眠 2
difference=$(comm -2 -3 "/tmp/after.txt" "/tmp/prev.txt">/tmp/Diff.txt)
lost=$(cat /boot/common/cache/tmp/Diff.txt)
alert --idea "/boot/home/Downloads: $check は、このフォルダー内の最新のファイルです。";
alert --idea "/boot/home/Downloads: $lost が削除されました。";
tstamp=$(stat --print "%Y" "$filename")
そうしないと
睡眠 3;
フィ
終わり