有没有办法用mkdir一次创建多个目录?
如果我想创建多个目录(在同一级别上),然后为它提供一个逗号分隔的目录名列表(或者那个效果)?
简短的回答
mkdir
需要多个参数,只需运行即可
mkdir dir_1 dir_2
您可以使用列表来创建目录,它可以变得非常疯狂。
让人们思考它的一些例子:
mkdir sa{1..50} mkdir -p sa{1..50}/sax{1..50} mkdir {az}12345 mkdir {1,2,3} mkdir test{01..10} mkdir -p `date '+%y%m%d'`/{1,2,3} mkdir -p $USER/{1,2,3}
- 从sa1到sa50的50个目录
- 相同但每个目录将保持sax1到sax50的50倍(-p将创建父目录,如果它们不存在。
- 从a12345到z12345的26个目录
- 逗号分隔列表制作目录1,2和3。
- 从
test01
到test10
10个目录。 - 与4相同,但当前日期为目录,1,2,3在其中。
- 与4相同,但当前用户为目录,1,2,3在其中。
所以,如果我理解正确并且您想要创建一些目录,并在其中创建新目录,那么您可以这样做:
mkdir -p sa{1..10}/{1,2,3}
并获得sa1,sa2,…,sa10以及每个目录1,2和3。
它非常简单,让您想要创建一个目录结构,例如:
Websites/ static/ cs js templates/ html
您可以在单个命令中执行此操作:
mkdir -p Website/{static/{cs,js},templates/html}
小心不要输入任何空格
使用换行符而不是逗号作为分隔符列出所需目录的名称。 保存该列表。
mkdir `cat list`
您现在应该拥有列表中指定的所有目录。
像这样的东西? (感谢muru为printf
提示)
printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls $ printf '%s' 'foo,bar,baz' | xargs -d, mkdir $ ls bar baz foo $
您可以将其包装到一个易于使用的函数中:
function mkdir_cs { printf '%s' "$1" | xargs -d, mkdir }
$ ls $ mkdir_cs 'foo,bar,baz' $ ls bar baz foo $
那么你想要逗号分隔的目录名列表? 那可以做到。
Shell + coreutils
由于每个人都发布oneliners,这里也是我的(mkdir +参数替换+ + shell重定向)。
DIR:/testdir skolodya@ubuntu:$ ls DIR:/testdir skolodya@ubuntu:$ mkdir $( tr '[,\n]' ' ' < /home/xieerqi/dirList.txt ) DIR:/testdir skolodya@ubuntu:$ ls dirFive/ dirfour/ dirone/ dirthree/ dirtwo/
AWK
AWK是一种文本处理语言,但它有非常好的system()
函数,它将调用默认的shell,并运行括号括起来的命令[s](必须是一个字符串)。
DIR:/xieerqi skolodya@ubuntu:$ awk -F ',' '{for(i=1;i<=NF;i++) system("mkdir "$i)}' dirList.txt DIR:/xieerqi skolodya@ubuntu:$ ls -ld dir* -rw-rw-r-- 1 xieerqi xieerqi 23 Feb 9 11:41 dirList.txt drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirone/ drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirthree/ drwxrwxr-x 2 xieerqi xieerqi 4096 Feb 9 11:42 dirtwo/ DIR:/xieerqi skolodya@ubuntu:$ cat dirList.txt dirone,dirtwo,dirthree
或者您可以使用gsub()
函数删除,
并调用system("mkdir "$0)
但如果您要创建名称中包含空格的目录,则可能会出现问题
python
Pythonic做同样的方法,就是读取每一行,摆脱尾随\n
,将所有东西都推到一个列表中,迭代列表项并为每个列表项创建dirs。 请注意,在下面的示例中, /home/username/
/home/xieerqi/dirList.txt
是我的文件的完整路径,我们通过加入string /home/username/
和从列表中读取的目录名称来构成每个新目录的完整路径。 必要时替换您自己的值
DIR:/testdir skolodya@ubuntu:$ ls DIR:/testdir skolodya@ubuntu:$ /home/xieerqi/makeDirs.py DIR:/testdir skolodya@ubuntu:$ ls dirFive/ dirfour/ dirone/ dirthree/ dirtwo/ DIR:/testdir skolodya@ubuntu:$ cat /home/xieerqi/makeDirs.py #!/usr/bin/env python import os with open("/home/xieerqi/dirList.txt") as file: for line in file: for directory in line.strip().rsplit(','): path = '/home/xieerqi/testdir/' + directory os.makedirs(path)
mkdir命令只需运行多个参数,如下所示
mkdir dir1 dir2 dir3 ... dirN
如果您想创建多个子目录,那么您可以在{}中传递这些参数,如下所示
mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN