在每个子目录中创建文本文件

在每个子目录中创建文本文件

例如,我有一个名为 的目录层次结构abc和一个文本文件names.txt.我需要从文本文件中选择几行,然后在 的每个子目录中创建带有示例文本的新文件,例如“Hello world”,abc其中每个选定的行names.txt都是新文件之一的名称。我必须使用xargsor在一行中完成此操作-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 worldA

通过一个小的修改,我们可以让它输出到特定目录下的文件,$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 \;

相关内容