递归查找目录A下的所有文件,将“abc”写入这些文件。仅限文件

时间:2012-08-15 19:48:27

标签: shell

我认为这将接近工作

find /mydirectory -name '*'  | xargs echo abc >

但我得到了:

find: paths must precede expression: b

需要一点帮助:) 感谢

3 个答案:

答案 0 :(得分: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 $@,这将是您的abc(这可以通过$ {1},$ {2},$ {3} ...)来测试。

答案 1 :(得分:0)

您可以通过编写另一个脚本来执行此操作,该脚本将多个文件名作为参数并对其进行回显。然后,不使用echo,而是使用xargs调用此脚本。您还可以将-type f添加到find,以便省略目录。

答案 2 :(得分:0)

尝试使用bash:

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