我想向超过 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"
' {} \;
怎么运行的:
find
替换{}
为它匹配的每个文件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 的介绍视频了解更多。