我正在尝试创建一个从 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
, 是没有问题的,而且可以说在风格上更可取。但可以省略它,就像这个答案中的其他示例一样。