如何在一个目录中一次创建多个目录?


25

我知道使用mkdir可以mkdir A B C D E F创建每个目录。如何在不输入每个字母或数字的情况下创建目录AZ或1-100?

Answers:


18

仅使用for循环可能是最简单的:

for char in {A..Z}; do
    mkdir $char
done

for num in {1..100}; do
    mkdir $num
done

不过您至少需要bash 3.0;否则,您必须使用类似seq


1
迈克尔,谢谢!很好奇,我也尝试过在{A..Z}中为char添加$ char前面的测试;做mkdir test $ char完成后,给了我目录test [AZ],总是好学
Steve Burdine

要记住的一件事是,当您列出文件名或将它们与*等通配符一起使用时,文件名将如何排序。'11'将在'2'之前排序。如果您将所有数字的长度都设置为前导零,则可以避免这种情况。丹尼斯·威廉姆斯(Dennis Williams)显示了如何在bash 4中执行此操作,但是如果您没有bash 4,则可以编写脚本来执行此操作。–
Joe


8

您还可以进行更复杂的组合(尝试使用echo而不是,mkdir这样以后就不会进行清理了):

比较

$ echo pre-{{F..G},{3..4},{m..n}}-post
pre-F-post pre-G-post pre-3-post pre-4-post pre-m-post pre-n-post

$ echo pre-{F..G}{3..4}{m..n}-post
pre-F3m-post pre-F3n-post pre-F4m-post pre-F4n-post pre-G3m-post pre-G3n-post
pre-G4m-post pre-G4n-post

如果您有Bash 4,请尝试

$ echo file{0001..10}
file0001 file0002 file0003 file0004 file0005 file0006 file0007 file0008 file0009
file0010

$ echo file{0001..10..2}
file0001 file0003 file0005 file0007 file0009

7

在Linux上,您可以使用“ seq”命令生成数字序列,但这并不是在所有Unix系统上都存在。例如,要生成从1到100的目录:

mkdir `seq 1 100`

虽然您当然可以使用shell utils将目录A到Z:

seq 65 90 \
    | while read foo; do printf "%b\n" `printf '\\\\x%x\n' $foo`; done \
    | xargs mkdir

仅使用Perl可能不那么难看:

perl -e 'foreach (ord "A"..ord "Z") { mkdir chr $_ }'


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.