我想这将关闭工作
find /mydirectory -name '*' | xargs echo abc >
但我得到了:
find: paths must precede expression: b
需要一点帮助:)谢谢
我想这将关闭工作
find /mydirectory -name '*' | xargs echo abc >
但我得到了:
find: paths must precede expression: b
需要一点帮助:)谢谢
试试这个
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 匹配a
、b
和c
(等),则将{}
扩展为所有三个并传入。
因此,您需要for f
在第二个命令中使用 a,默认为for f in $@
,这将是您的a
, b
, and c
(这可以通过 ${1}, ${2}, ${3}... 进行测试)。
您可以通过编写另一个脚本来完成此操作,该脚本将多个文件名作为参数并对其进行回显。然后,不使用 echo,而是使用 xargs 调用此脚本。您还可以添加-type f
到find
以使其省略目录。
用 bash 试试这个:
for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done