あるコマンドから次のコマンドに引数を渡す

あるコマンドから次のコマンドに引数を渡す

手動で実行する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)
    

bashPOSIX シェルや他の POSIX シェルで実行する操作は、次のことを避けてください。

for file in $(find...)

または、少なくともフィールド区切り文字を改行で修正し、ワイルドカードを無効にして問題を軽減します。

IFS='
'; set -f; for file in $(find...)

(改行文字を含むファイルパスではまだ失敗します。)

おすすめ記事