例如,我有一个名为 的目录层次结构abc
和一个文本文件names.txt
.我需要从文本文件中选择几行,然后在 的每个子目录中创建带有示例文本的新文件,例如“Hello world”,abc
其中每个选定的行names.txt
都是新文件之一的名称。我必须使用xargs
or在一行中完成此操作-exec
。我尝试过类似的方法,但似乎不起作用:
find abc -type d -exec sh -c 'grep ^'A' names.txt | xargs -I% sh -c 'echo 'Hello world' | tee {}/%'' \;
如何以正确的方式做到这一点?
答案1
让我们从一个目录所需的内容开始:
awk '/^A/ { print "Hello world" >$0 }' names.txt
如果输入行以大写字母开头,这将读取调用的文件names.txt
并将字符串写入由该文件的完整输入行给出的每个文件名。Hello world
A
通过一个小的修改,我们可以让它输出到特定目录下的文件,$dirname
:
awk -v dir="$dirname" '/^A/ { print "Hello world" >(dir "/" $0) }' names.txt
然后我们可以find
为每个子目录(包括起始目录)调用它:
find abc -type d -exec awk -v dir={} '/^A/ { print "Hello world" >(dir "/" $0) }' names.txt \;