2012-08-15 27 views

回答

3

試試這個

find . -type f -exec sh -c 'echo "abc" >> ${1}' _ "{}" \; 

或者,如果你想這樣做批量:

find . -type f -exec sh -c 'for f; do echo "abc" >> $f; done' _ "{}" + 

如果需要解釋,問。

This頁面是一個很好的指導如何使用find。

在這兩個命令中,_{}都作爲參數傳遞給sh命令。由於$ 0不完全可靠(請參閱鏈接頁面),因此會將一個虛擬變量_傳遞給它。

查找放在{},這是擴展。因此,如果命令與文件a相匹配,則在第一個命令中將{}擴展爲a

在第一個命令中,您傳遞給exec的命令終止於;,但;對於shell是特殊的,因此您將其轉義。

第二個命令運行的批量操作,所以如果找到匹配abc(等)時,{}擴展到所有三個傳入。

因此,你需要在for f第二個命令默認爲for f in [email protected],這將是您的a,bc(這可以通過執行$ {1},$ {2},$ {3} ...來測試)。

+0

工程。謝謝!!! – 2012-08-15 21:36:06

+0

嗨@twmb謝謝你。你的命令中有什麼「_ {} \」?謝謝 – 2012-08-15 21:47:35

+0

謝謝@twmb這是一個很好的解釋 – 2012-08-15 22:15:39

0

您可以通過編寫另一個做到這一點腳本,它將一些文件名作爲參數並對它們執行回顯。然後,用xargs調用這個腳本,而不是使用echo。您還可以將-type f添加到find,以便省略目錄。

0

試試這個使用bash:

for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done 
相關問題