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' {} +

相关内容