我需要用文字(遞歸地)填充具有特定文件名的所有文件。在 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' {} +