我认为这是要去近距离工作递归查找目录A下的所有文件,写入“abc”到这些文件。只有到文件
find /mydirectory -name '*' | xargs echo abc >
但我得到:
find: paths must precede expression: b
需要一点帮助:) 感谢
我认为这是要去近距离工作递归查找目录A下的所有文件,写入“abc”到这些文件。只有到文件
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' _ "{}" +
如果需要解释,问。
This页面是一个很好的指导如何使用find。
在这两个命令中,_
和{}
都作为参数传递给sh
命令。由于$ 0不完全可靠(请参阅链接页面),因此会将一个虚拟变量_
传递给它。
查找放在{}
,这是扩展。因此,如果命令与文件a
相匹配,则在第一个命令中将{}
扩展为a
。
在第一个命令中,您传递给exec的命令终止于;
,但;
对于shell是特殊的,因此您将其转义。
第二个命令运行的批量操作,所以如果找到匹配a
,b
和c
(等)时,{}
扩展到所有三个传入。
因此,你需要在for f
第二个命令默认为for f in [email protected]
,这将是您的a
,b
和c
(这可以通过执行$ {1},$ {2},$ {3} ...来测试)。
工程。谢谢!!! – 2012-08-15 21:36:06
嗨@twmb谢谢你。你的命令中有什么“_ {} \”?谢谢 – 2012-08-15 21:47:35
谢谢@twmb这是一个很好的解释 – 2012-08-15 22:15:39
您可以通过编写另一个做到这一点脚本,它将一些文件名作为参数并对它们执行回显。然后,用xargs调用这个脚本,而不是使用echo。您还可以将-type f
添加到find
,以便省略目录。
试试这个使用bash:
for f in $(find /mydirectory -type f); do echo 'abc' > "$f"; done
我觉得你的问题是ABC>换行符。管道将find的输出转发给xargs,但是echo不知道要写入'abc'的文件。但是贝壳绝对不是我的特长。 – ATaylor 2012-08-15 19:50:26