2012-08-15 88 views

回答

3

试试这个

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是特殊的,因此您将其转义。

第二个命令运行的批量操作,所以如果找到匹配abc(等)时,{}扩展到所有三个传入。

因此,你需要在for f第二个命令默认为for f in [email protected],这将是您的a,bc(这可以通过执行$ {1},$ {2},$ {3} ...来测试)。

+0

工程。谢谢!!! – 2012-08-15 21:36:06

+0

嗨@twmb谢谢你。你的命令中有什么“_ {} \”?谢谢 – 2012-08-15 21:47:35

+0

谢谢@twmb这是一个很好的解释 – 2012-08-15 22:15:39

0

您可以通过编写另一个做到这一点脚本,它将一些文件名作为参数并对它们执行回显。然后,用xargs调用这个脚本,而不是使用echo。您还可以将-type f添加到find,以便省略目录。

0

试试这个使用bash:

for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done 
相关问题