bash - 用于递归遍历每个子目录并在每个级别上创建一个新目录的 Bash 脚本
问题描述
标题说明了一切。我正在尝试编写一个 bash 脚本来递归遍历每个子目录,将起始目录作为 $1 并在该文件夹中创建一个目录。所以给出起始目录结构
起始目录
- 目录_1
- dir_2
- 目录 3
新结构将是
起始目录
目录_1
- 新目录
dir_2
- dir_3
- 新目录
- 新目录
- dir_3
新目录
我对 bash 很陌生(就像今天下午一样),所以我可以使用一些帮助。
解决方案
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
与-print0
find 匹配以通过 nuls 分隔文件名。-i@
表示@
在命令中用接收到的文件名替换。mkdir
当然是制作目录;-p
如果目录不存在,则强制创建干预目录,避免任何潜在的排序问题,并避免在目录已存在时抱怨。@/new_dir
使用输入创建新目录。
推荐阅读
- python - 在列表中循环(在最后一个之后获取第一个)
- react-native - 我需要创建一个 DrawerNavigator 并且抽屉应该在一个屏幕上可用,而不是全部。那么,我该如何实施呢?
- vue.js - Webpack 热重载不会停止 html5 音频
- ruby-on-rails - 如何使用具有大型数据集的原始 sql(postgres)在 Rails 上创建迁移
- java - 如何登录并继续在 JAVA 中进行抓取?
- haskell - 如何从元组列表创建表
- java - 如何将字符串参数从一组允许值传递给函数
- kdb - 您可以将一个列表的元素附加到另一个列表的元素而不遍历 Q 中的列表吗?
- c# - c#中模型的继承和扩展,在base中具有多个属性实现
- matlab - 在 MATLAB 中创建时间过滤器