我需要在目录中的一堆文件中附加一些文字,所以我觉得我很聪明并尝试这样的事情:
find . -name "*.txt" -exec cat source >> {} \;
当然,这不起作用,因为重定向被shell调用find,而不是exec。
我最终使用BBEdit和多文件查找/替换来完成它,但我确信有一些方法可以通过命令行进行查找,但是什么?
好吧,好吧,我可以想到一个解决方案,但我不喜欢它:让exec为每个结果生成一个shell。这可能有用。
答案 0 :(得分:3)
怎么样:
find . -name "*.txt" -exec dd if=source of='{}' oflag=append conv=notrunc ';'
您应该可以将它与包含空格和特殊字符的文件一起使用。
答案 1 :(得分:2)
您至少有两个选择:
find . -name "*.txt" -exec sh -c 'f={}; cat source >> $f' \;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
执行调用exec
find
函数的命令。请注意,使用-type f
来匹配文件也很方便。
或者您可以使用简单的for
循环,循环遍历与模式*.txt
匹配的所有文件:
for file in *.txt
do
cat source >> "$file"
done