如何为树上的每个目录创建一个文件?

如何为树上的每个目录创建一个文件?

对于以下树结构:

    .
└── dir1
    └── dir2
        └── dir3

为每个目录创建一个文件(可以为空)的简单方法是什么,因此生成的树将如下所示:

.
├── dir1
│   ├── dir2
│   │   ├── dir3
│   │   │   └── README
│   │   └── README
│   └── README
└── README

答案1

zsh

touch -- README **/*(N/e[REPLY+=/README])

它结合了递归通配符**/*) 和全局限定符,这里是:

  • Nullglob:如果没有匹配,则不会触发错误。
  • /:限制文件类型目录
  • e[code]e评估code每个文件的 ,此处附加/README到文件路径(存储$REPLY在评估的代码中)。

或者你可以使用匿名函数它传递目录列表,并将 附加/README到它传递给的参数中的每个目录touch

() {touch -- $^@/README} . **/*(N/)

(和rc 风格的数组扩展@对于使用语法的匿名函数参数$^array)。

在所有这些中,您可以添加Dotglob glob 限定符来添加README到隐藏目录。

答案2

您可以使用 find 来做到这一点:

find . -mindepth 1 -type d -exec touch "{}/README" \;

解释

  • -mindepth 1将设置最小深度,以避免包含当前目录
  • -type d只会找到目录
  • -exec将运行命令
  • {}包含找到的目录的路径

如果您只想使用内置 shell 命令:

for dir in *; do if [ -d "$dir" ]; then touch "$dir/README"; fi; done

解释

  • for将循环遍历 中的每个元素*,即当前目录中的所有文件。dir将在循环期间包含当前元素。
  • if [ -d $dir ]检查该元素是否是一个目录,然后
  • README创建一个以包含的目录名命名的文件$dir

相关内容