0

我想这将关闭工作

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

但我得到了:

find: paths must precede expression: b

需要一点帮助:)谢谢

4

3 回答 3

3

试试这个

find . -type f -exec sh -c 'echo "abc" >> ${1}' _ "{}" \;

或者,如果您想批量执行:

find . -type f -exec sh -c 'for f; do echo "abc" >> $f; done' _ "{}" +

如果您需要解释,请询问。

这个页面是关于如何使用 find 的一个很好的指南。

在这两个命令中,_{}作为参数传递给sh命令。因为 $0 使用起来并不完全可靠(请参阅链接页面),所以将一个虚拟变量_传递给它。

Find 将其匹配项放入{}已扩展的 中。因此,如果该命令与一个文件匹配a,则在第一个命令 {}中扩展为。a

在第一个命令中,您传递给 exec 的命令以 结尾;,但;对 shell 来说是特殊的,因此您将其转义。

第二个命令作为批量操作运行,因此如果 find 匹配abc(等),则将{}扩展为所有三个并传入。

因此,您需要for f在第二个命令中使用 a,默认为for f in $@,这将是您的a, b, and c(这可以通过 ${1}, ${2}, ${3}... 进行测试)。

于 2012-08-15T20:04:34.537 回答
0

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

于 2012-08-15T19:51:11.043 回答
0

用 bash 试试这个:

for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done
于 2012-08-15T22:27:36.613 回答