手動で実行する2つの別々のコマンドを、cronを実行できるbashスクリプトに統合するスクリプトを作成しようとしています。
最初のコマンドは、特定の名前とサイズのファイルを簡単に検索することです。
find /some/path -type f -name file.pl -size +10M
これにより、一致する複数のファイルとフルパスが生成されます。次に、これらのパスを次のスクリプトの引数として for ループに手動でコピーします。
for path in /some/path/1/file.pl /some/path/2/file.pl /some/path/3/file.pl ; do perl /my/script.pl $path ; done
これを単一のシェルスクリプトに入れるのは簡単ですが、難しいです。
ベストアンサー1
述語の用途は次のとおりです-exec
。
find /some/path -type f -name file.pl -size +10M -exec perl /my/script.pl {} \;
本当に欲しいならあなたの殻の出力に基づいてコマンドを実行して信頼性を維持するには、find
コマンドはbash
次のように/特定でなければなりません。zsh
zsh
:IFS=$'\0' for f ($(find /some/path -type f -name file.pl -size +10M -print0)) { /my/script.pl $f }
では
zsh
簡単に次のことができます。for f (./**/file.pl(.LM+10)) /my/script.pl $f
bash
/zsh
while IFS= read -rd '' -u3 file; do /my/script.pl "$file" done 3< <(find /some/path -type f -name file.pl -size +10M -print0)
bash
POSIX シェルや他の POSIX シェルで実行する操作は、次のことを避けてください。
for file in $(find...)
または、少なくともフィールド区切り文字を改行で修正し、ワイルドカードを無効にして問題を軽減します。
IFS='
'; set -f; for file in $(find...)
(改行文字を含むファイルパスではまだ失敗します。)