「マージ」の定義は何ですか?Perlスクリプトはファイル名の引数を取りますか?ファイル名にスペースやその他の厄介な文字が含まれていることはありますか?
スクリプトがコマンドライン引数を受け取らないと仮定すると、次のいずれかを実行できます。
cat $(find $FOLDER -name "*.txt") | ./some-processing-script.pl >$TARGET
または、1つのコマンドラインに対してファイルが多すぎる場合は、次のようにします。
find $FOLDER -name "*.txt" -print | xargs cat | ./some-processing-script.pl > $TARGET
または、名前にスペースがあり、十分に現代的である場合find
(POSIX 2008準拠):
find $FOLDER -name "*.txt" -exec cat {} + | ./some-processing-script.pl > $TARGET
本当に常にターゲットファイルに追加したい場合は、をに置き換え>
て>>
ください。これらの例でcat
は、は複数のファイルを連結するために使用されています。これは、の適切な使用法ですcat
。UUOC(Useless Use of cat
)賞はcat
、I / Oリダイレクトが代わりに仕事をするときに、一度に1つのファイルを処理するために使用することになります。
Perlスクリプトを担当している場合は、「標準フィルター」、つまりコマンドラインで指定されたファイルを読み取るプログラム、またはファイルが指定されていない場合は標準入力になるように変更する必要があります。cat
次に、 :を削除できます。
./some-processing-script.pl $(find $FOLDER -name "*.txt") >$TARGET
find $FOLDER -name "*.txt" -print | xargs ./some-processing-script.pl > $TARGET
find $FOLDER -name "*.txt" -exec ./some-processing-script.pl {} + > $TARGET
これらのオプションのうち、最後のものは、Perlスクリプトがコマンドラインでファイル名を受け入れるか、受け入れるように変更できると仮定して、私が使用するオプションです。Perlスクリプトがコマンドライン引数を処理できない(実行されない)場合は、cat
andパイプを使用して3番目のコマンドを使用します。しかし、これは、可能な場合に標準のUnixフィルターのように動作するようにプログラム(Perlスクリプト)を設計する必要がある理由を示しています。つまり、それらをより効率的にコマンドパイプラインに組み合わせることができます。