将行附加到许多文件

Dav*_*veo 6 sed find xargs

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

find . -name *.txt -print | xargs -I % echo "hello world" >> %
Run Code Online (Sandbox Code Playgroud)

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

Mik*_*kel 15

>> %xargs看到零件之前,外壳正在扩展零件。

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

find . -name "*.txt" -exec sh -c '
    echo "hello world" >> "$0"
    ' {} \;
Run Code Online (Sandbox Code Playgroud)

这个怎么运作:

  1. find{}它匹配的每个文件替换
  2. bash -c "some command" arg0...$0...里面"some command"的脚本

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

find . -name "*.txt" -exec sed -i -e '$a\
hello world' {} \;
Run Code Online (Sandbox Code Playgroud)

参考: