如何在每个子文件夹中创建包含文本的文件?

如何在每个子文件夹中创建包含文本的文件?

例如我有一个层次结构a/b/c。如何在每个文件夹中创建一个包含名称d.txt 和文本的文件?"Hello World"aa/ba/b/c

答案1

带壳zsh

echo Hello World > a{,/b{,/c}}/d.txt

或者对于通过递归搜索在这里找到的所有非隐藏目录:

dirs=(**/*(/))
echo Hello World > $^dirs/d.txt

这涉及到内部tee,因此输出会同时写入所有文件。如果有大量文件,您可能会遇到打开文件数量的限制,在这种情况下您可能需要按顺序写入该内容,一次一个文件:

for d ($dirs) echo Hello World > $d/d.txt

标准等效项类似于:

LC_ALL=C find . ! -name . \( -name '.*' -prune -o -type d -exec sh -c '
  for dir do
    echo Hello World > "$dir/d.txt"
  done' sh {} + \)
  • LC_ALL=C这样就-name '.*'匹配所有以 开头的文件.,而不仅仅是那些以 开头.且后跟有效字符序列的文件。
  • ! -name .只排除我们想要的当前目录-文件夹(也不想修剪.
  • -name '.*' -prune,排除隐藏文件并防止find下降到隐藏目录。
  • -o: 如果不 (或者
  • -type d仅选择类型的文件目录
  • -exec sh -c 'inline-script' sh {} +:将匹配目录的列表传递给内联脚本。

答案2

尝试

find . -type d -exec /bin/bash -c 'echo "Hello world" >'{}'/d.txt' \;

相关内容