自动创建目录树

自动创建目录树

我正在尝试创建一个从 A 到 Z 的目录树,其中下一个目录位于当前目录内。

例如:B 在 A 内,而 C 在 B 内,等等。

-A
--B
---C
----...Z

关于如何以自动化方式完成此操作有什么线索吗?

答案1

使用mkdir,printf和 bash 的括号扩展:

$ mkdir -p "$(printf "%s/" {A..Z})"
$ tree A
A
└── B
    └── C
        └── D
            └── E
                └── F
                    └── G
                        └── H
                            └── I
                                └── J
                                    └── K
                                        └── L
                                            └── M
                                                └── N
                                                    └── O
                                                        └── P
                                                            └── Q
                                                                └── R
                                                                    └── S
                                                                        └── T
                                                                            └── U
                                                                                └── V
                                                                                    └── W
                                                                                        └── X
                                                                                            └── Y
                                                                                                └── Z

25 directories, 0 files
  • {A..Z}扩展为A B ... Z
  • printf "%s/"打印参数后跟一个/,所以我得到A/B/...Z/
  • mkdir -p创建该A/B/.../Z目录以及需要创建的任何父目录。

答案2

在非常简单的层面上,您可以利用{A..Z}扩展来生成所有字母,然后迭代地制作并输入每个字母:

~/test_directory$ for d in {A..Z}; do mkdir "$d"; cd "$d"; done
~/test_directory/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z$ 

正如您在我的提示输出中所看到的,现在您已经有了完全链接的目录。

但是,如果实际目录名称与字母不同,则必须以某种方式提供目录名称列表(可能通过文件),然后对其进行迭代并再次执行相同的过程。基本上,这

while IFS= read -r dir_name;do mkdir "$dir_name"; cd "$dir_name" ;done < directory_list.txt

答案3

虽然穆鲁之printf无可匹敌,我个人喜欢jot这类事情。jot在 Ubuntu 中默认不安装。athena-jot软件包提供了它。以下任一命令均可用:

mkdir -p "$(jot -s/ -c 26 A)"
jot -s/ -c 26 A | xargs mkdir -p

实际上,任何生成字母序列并用斜线连接起来的命令都可以实现这一点,因为它的输出可以mkdir -p通过命令替换(例如muru 的回答)或使用xargs。下面是使用一些工具的一些示例,xargs这些工具不需要您安装软件,除非是在非常小的系统或 Ubuntu Core 上:

perl -we 'print join "/", A..Z' | xargs mkdir -p
ruby -we 'print (?A..?Z).to_a * ?/' | xargs mkdir -p
python3 -c 'print("/".join(__import__("string").ascii_uppercase))' | xargs mkdir -p

旧版 Ubuntu 版本附带的是 Python 2 而不是 Python 3。如果您确实想使用 Python 执行此操作,只需更改python3为即可使最后一个命令正常工作。python

相似地,muru 的简单方法也可以写成:

printf '%s/' {A..Z} | xargs mkdir -p

/要求创建的目录路径后面的mkdir -p, 是没有问题的,而且可以说在风格上更可取。但可以省略它,就像这个答案中的其他示例一样。

相关内容