Diego J. Sanchez Asked: 2022-03-25 12:31:39 +0800 CST2022-03-25 12:31:39 +0800 CST 2022-03-25 12:31:39 +0800 CST 如何为树上的每个目录创建一个文件? 772 对于以下树结构: . └── dir1 └── dir2 └── dir3 为每个目录创建文件(可能为空)的简单方法是什么,因此生成的树将如下所示: . ├── dir1 │ ├── dir2 │ │ ├── dir3 │ │ │ └── README │ │ └── README │ └── README └── README touch tree 2 个回答 Voted Best Answer mashuptwice 2022-03-25T12:37:35+08:002022-03-25T12:37:35+08:00 你可以用 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 Stéphane Chazelas 2022-03-26T04:38:07+08:002022-03-26T04:38:07+08:00 与zsh: touch -- README **/*(N/e[REPLY+=/README]) 它结合了递归 globbing ( **/*) 和glob 限定符,这里是: Nullglob:如果没有匹配项,则不会触发错误。 /: 限制为目录类型的文件 e[code]:为每个文件评估 ,这里附加e到文件路径(存储在评估的代码中)。code/README$REPLY 或者您可以使用一个匿名函数,它传递目录列表,并将 附加/README到它传递给的参数中的每个touch: () {touch -- $^@/README} . **/*(N/) (使用语法对匿名函数参数进行rc 样式数组扩展)。@$^array 在所有这些中,您可以添加Dotglob glob 限定符以添加README到隐藏目录。
你可以用 find 做到这一点:
解释
-mindepth 1
将设置最小深度,避免包括当前目录-type d
只会找到目录-exec
将运行一个命令{}
包含找到的目录的路径如果您只想使用内置的 shell 命令:
解释
for
将遍历 中的每个元素*
,即当前目录中的所有文件。dir
将在循环期间包含当前元素。if [ -d $dir ]
检查元素是否是目录,然后才检查README
在包含的目录名称中创建一个名为的文件$dir
与
zsh
:它结合了递归 globbing (
**/*
) 和glob 限定符,这里是:N
ullglob:如果没有匹配项,则不会触发错误。/
: 限制为目录类型的文件e[code]
:为每个文件评估 ,这里附加e
到文件路径(存储在评估的代码中)。code
/README
$REPLY
或者您可以使用一个匿名函数,它传递目录列表,并将 附加
/README
到它传递给的参数中的每个touch
:(使用语法对匿名函数参数进行rc 样式数组扩展)。
@
$^array
在所有这些中,您可以添加
D
otglob glob 限定符以添加README
到隐藏目录。