なぜ
$ while true ; do 'date; time find /tmp/test -type f \
-exec cp /dev/null {} \;';sleep 3600; done
動作せず、代わりにエラーメッセージが返されます。
-bash: date; time find /tmp/test -type f -exec cp /dev/null {} \;: No such file or directory
エスケープしようとしましたが、;
まだ{}
同じエラーが発生します。はい、ディレクトリがあります/tmp/test
。
答え1
引数はdo
単一のコマンドであり、追加のコマンドは一連のコマンドを使用します。
while true ; do date ; find ... ; sleep 3600 ; done
答え2
while true; do
date
time find /tmp/test -type f -exec cp /dev/null {} \;
sleep 3600
done
コマンドの一重引用符のため、シェルは引用符付き文字列を実行するコマンドの名前として解釈しますが、それが見つからないため、特定のエラーが発生します。
1時間ごとにファイルを消去するもう1つの方法/tmp/test
は、次のスケジュールに従ってcronjobを使用することです。
0 * * * * find /tmp/test -type f -exec cp /dev/null {} \;
答え3
引用符を削除すると、期待どおりに機能します(たとえば、2つのセミコロンが連続している必要があります)。