将行附加到多个文件

将行附加到多个文件

我想向超过 200,000 个文件添加一些文本我正在尝试这样做

find . -name *.txt -print | xargs -I % echo "hello world" >> %

但什么也没发生。当我运行find . -name *.txt它时,它会自行工作echo "hello world" >> myfile.txt

答案1

外壳在看到该>> %部件之前正在xargs对其进行扩展。

如果您需要执行 shell 重定向,则必须尝试如下操作:

find . -name "*.txt" -exec sh -c '
    echo "hello world" >> "$0"
    ' {} \;

怎么运行的:

  1. find替换{}为它匹配的每个文件
  2. bash -c "some command" arg0...设置在脚本$0...内部"some command"

sed或者,您可以使用不依赖于>>例如的命令

find . -name "*.txt" -exec sed -i -e '$a\
hello world' {} \;

参考:

答案2

您尝试过的原始命令......

find . -name *.txt -print | xargs -I % echo "hello world" >> %

需要改为

find . -name "*.txt" | xargs -I {} sh -c "echo 'hello world' >> '{}' "

答案3

使用 GNU Parallel,您可以执行以下操作:

find . -name *.txt -print | parallel 'echo "hello world" >> {}'

您可以简单地通过以下方式安装 GNU Parallel:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

观看 GNU Parallel 的介绍视频了解更多

相关内容