什麼是你的 '合併' 的定義是什麼?你的Perl腳本是否需要文件名參數?你的文件名是否包含空格或其他尷尬的角色?
假設你的腳本不帶命令行參數,你可以做的一個:
cat $(find $FOLDER -name "*.txt") | ./some-processing-script.pl >$TARGET
或者,如果是一個命令行的文件太多,則:
find $FOLDER -name "*.txt" -print | xargs cat | ./some-processing-script.pl > $TARGET
或者,如果您的名稱中有足夠的空間並且具有足夠現代的空間(符合POSIX 2008):
find $FOLDER -name "*.txt" -exec cat {} + | ./some-processing-script.pl > $TARGET
如果您確實想要始終附加到目標文件,請將>
替換爲>>
。在這些示例中,cat
正在用於連接多個文件,這是cat
的正確使用。 UUOC(無用使用cat
)獎與使用cat
一起處理單個文件,而I/O重定向可以完成這項工作。
如果你負責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
和pipe。但是這說明了爲什麼您應該設計程序(Perl腳本)以儘可能像標準Unix過濾器那樣工作;這意味着您可以更有效地將它們組合到命令管道中。
沒有「掃描當前目標」,該文件以追加模式打開。 – Mat