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