首页 > 解决方案 > 用于递归遍历每个子目录并在每个级别上创建一个新目录的 Bash 脚本

问题描述

标题说明了一切。我正在尝试编写一个 bash 脚本来递归遍历每个子目录,将起始目录作为 $1 并在该文件夹中创建一个目录。所以给出起始目录结构

起始目录

新结构将是

起始目录

我对 bash 很陌生(就像今天下午一样),所以我可以使用一些帮助。

标签: bashdirectorytraversal

解决方案


find $1 -type d -a -not -name new_dir -print0 | xargs -0 -i@ mkdir -p @/new_dir

递归地find下降文件或目录层次结构。-type d意味着只看目录。-a -not -name new_dir表示排除已命名的目录new_dir(避免可能的无限循环)(“而不是名称”)。-print0表示使用终止的 null 将其打印出来(这可以正确处理带有空格的目录)。通过管道将此 ( |) 传递给程序xargs,该程序将标准输入中的每一行传递给给定的命令。-0-print0find 匹配以通过 nuls 分隔文件名。-i@表示@在命令中用接收到的文件名替换。mkdir当然是制作目录;-p如果目录不存在,则强制创建干预目录,避免任何潜在的排序问题,并避免在目录已存在时抱怨。@/new_dir使用输入创建新目录。


推荐阅读