zsh 在其他 shell 中的“echo SomeText >> **/filename”

zsh 在其他 shell 中的“echo SomeText >> **/filename”

我需要用文字(遞歸地)填充具有特定文件名的所有文件。在 zsh 中,這可以透過以下方式完成

echo SomeText > **/TheFileName

我搜尋 sh 相容和/或 tcsh shell 的通用解決方案。有沒有比以下指令更短/更簡單的方法?

find . -name "TheFileName" -print0 | xargs -0 sed -n -i -e '1c\nSomeText'

答案1

find . -name TheFileName -type f -exec sh -c 'for i do
     echo SomeText > "$i"; done' sh {} +

答案2

您可以tee為此使用:

如果您的 shell 正確匹配**/TheFileName, 並且問題只是獲取每個文件中的內容:

echo SomeText | tee **/TheFileName >/dev/null

如果問題是**/TheFileName不正確匹配,您可以使用find

echo SomeText | find . -name TheFileName -exec tee {} + >/dev/null

如果您find沒有-exec +,那麼這裡的其他解決方案是合適的。

如果您有大量文件(大於getconf ARG_MAX),這些也將無法運作。

答案3

稍微短一點:

find . -name TheFileName -type f -exec sed -n -i -e '1c SomeText' {} +

相關內容