将文本添加到一堆文件中

时间:2014-08-18 08:18:50

标签: bash shell find cat

我需要在目录中的一堆文件中附加一些文字,所以我觉得我很聪明并尝试这样的事情:

find . -name "*.txt" -exec cat source >> {} \;

当然,这不起作用,因为重定向被shell调用find,而不是exec。

我最终使用BBEdit和多文件查找/替换来完成它,但我确信有一些方法可以通过命令行进行查找,但是什么?

好吧,好吧,我可以想到一个解决方案,但我不喜欢它:让exec为每个结果生成一个shell。这可能有用。

2 个答案:

答案 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