我認爲這是要去近距離工作遞歸查找目錄A下的所有文件,寫入「abc」到這些文件。只有到文件
find /mydirectory -name '*' | xargs echo abc >
但我得到:
find: paths must precede expression: b
需要一點幫助:) 感謝
我認爲這是要去近距離工作遞歸查找目錄A下的所有文件,寫入「abc」到這些文件。只有到文件
find /mydirectory -name '*' | xargs echo abc >
但我得到:
find: paths must precede expression: b
需要一點幫助:) 感謝
試試這個
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是特殊的,因此您將其轉義。
第二個命令運行的批量操作,所以如果找到匹配a
,b
和c
(等)時,{}
擴展到所有三個傳入。
因此,你需要在for f
第二個命令默認爲for f in [email protected]
,這將是您的a
,b
和c
(這可以通過執行$ {1},$ {2},$ {3} ...來測試)。
工程。謝謝!!! – 2012-08-15 21:36:06
嗨@twmb謝謝你。你的命令中有什麼「_ {} \」?謝謝 – 2012-08-15 21:47:35
謝謝@twmb這是一個很好的解釋 – 2012-08-15 22:15:39
您可以通過編寫另一個做到這一點腳本,它將一些文件名作爲參數並對它們執行回顯。然後,用xargs調用這個腳本,而不是使用echo。您還可以將-type f
添加到find
,以便省略目錄。
試試這個使用bash:
for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done
我覺得你的問題是ABC>換行符。管道將find的輸出轉發給xargs,但是echo不知道要寫入'abc'的文件。但是貝殼絕對不是我的特長。 – ATaylor 2012-08-15 19:50:26