如果我想创建多个目录(在同一级别上),然后以逗号分隔的目录名称列表(或类似的名称)提供给它?
man
该命令的名称。
man mkdir
“种类”建议可以一次创建多个目录,但并未具体提及,也没有提及如何实现。
...
after [DIRECTORY]
,这意味着可以重复该参数。因此DIRECTORY(ies)
是指所有传递的DIRECTORY
参数。但是,“ RTFM”注释有时会忘记要学习的符号。
如果我想创建多个目录(在同一级别上),然后以逗号分隔的目录名称列表(或类似的名称)提供给它?
man
该命令的名称。
man mkdir
“种类”建议可以一次创建多个目录,但并未具体提及,也没有提及如何实现。
...
after [DIRECTORY]
,这意味着可以重复该参数。因此DIRECTORY(ies)
是指所有传递的DIRECTORY
参数。但是,“ RTFM”注释有时会忘记要学习的符号。
Answers:
您可以使用列表来创建目录,并且目录会变得很疯狂。
一些使人们思考的示例:
mkdir sa{1..50}
mkdir -p sa{1..50}/sax{1..50}
mkdir {a-z}12345
mkdir {1,2,3}
mkdir test{01..10}
mkdir -p `date '+%y%m%d'`/{1,2,3}
mkdir -p $USER/{1,2,3}
test01
到10个目录test10
。因此,如果我正确理解它,并且想要创建一些目录,并在其中创建新目录,则可以执行以下操作:
mkdir -p sa{1..10}/{1,2,3}
并在每个目录1、2和3中获取sa1,sa2,...,sa10。
dash
的默认设置中,它将不起作用/bin/sh
。
mkdir sa$(seq 0.1 0.1 1)
,它所做的就是创建一个名为sa0.1的目录,其余目录创建0.2、0.3,...,1。如何在不编写整个列表的情况下扩展小数括号?
使用换行符而不是逗号作为分隔符,列出所需目录的名称。保存该列表。
mkdir `cat list`
现在,您应该在列表中命名了所有目录。
spaced dir
,则它将创建两个dirs spaced
和`dir。
junk\ dir
在list
文件中提供了两个目录,junk\
和dir
。当我\
在目录名称中看到时,让我感到恐慌。
-p
其他答案中提到的标志结合使用。如果是这样,则list
文件不必包含父目录作为它们自己的行,它们将被检测并自动创建。
像这样吗 (感谢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
$
printf "%s" "$1" | xargs -d, mkdir
就足够了。
因此,您是否希望用逗号分隔目录名称列表?可以做到的。
壳牌+ 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,并运行括号内的命令(必须为字符串)。
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的方式做同样的事情,将是读取每一行,摆脱尾随\n
,将所有内容推入一个列表,然后遍历列表项并为每个列表项创建dirs。请注意,在下面的示例中,/home/xieerqi/dirList.txt
是给我文件的完整路径,我们通过连接字符串/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)
dir{1..1000}
。假设您
man mkdir
....