我认为这将接近工作
find /mydirectory -name '*' | xargs echo abc >
但我得到了:
find: paths must precede expression: b
需要一点帮助:) 感谢
答案 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是特殊的,所以你将其转义。
第二个命令作为批量操作运行,因此如果查找匹配a
,b
和c
(等),{}
将扩展为全部三个并传入。
因此,您需要在第二个命令中for f
,默认为for f in $@
,这将是您的a
,b
和c
(这可以通过$ {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