#1 楼
简短答案mkdir
带有多个参数,只需运行mkdir dir_1 dir_2
#2 楼
您可以使用列表来创建目录,并且目录会变得很疯狂。一些示例使人们开始思考它: />从sa1到sa50的50个目录
相同,但每个目录将保存sax1到sax50的50倍(-p将创建父目录(如果不存在)。 />以逗号分隔的列表将第1、2和3个目录从
test01
到test10
划分为10个目录。与4相同,但当前日期为目录,其中有1,2,3。 />与4相同,但当前用户为目录,其中包含1,2,3。 ,则可以执行以下操作:
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}
并在每个目录1、2和3中获取sa1,sa2,...,sa10和
评论
我同意@gniourf_gniourf ...您的答案中没有使用正则表达式。您是要说其他话还是提供其他示例?
– Slipp D. Thompson
16年2月10日在4:02
@gniourf_gniourf完成了:)
–灵风
16年2月10日在7:35
值得一提的是,花括号扩展未在POSIX shell中定义:pubs.opengroup.org/onlinepubs/9699919799/utilities/…例如,它不能在破折号中使用,这是Ubuntu上的默认/ bin / sh。
– pabouk
16年2月10日在9:19
这个答案取决于shell在将输入作为mkdir的参数提供输入之前对其进行扩展。仅仅说mkdir可以创建带有多个参数的多个dis,然后谈论给定的shell如何使之更简单,这将更为准确。
–deed02392
16年2月11日,下午5:55
如果我尝试做类似mkdir sa $(seq 0.1 0.1 1)的事情,它所做的就是创建一个名为sa0.1的目录,其余的创建0.2、0.3,...,1。整个清单?
–底座
17年1月3日在23:57
#3 楼
这非常简单,让您想创建一个目录结构,例如: >Websites/
static/
cs
js
templates/
html
注意不要输入任何空格
评论
您也可以在运行命令之前按此处的tab展开它们。
–艾萨克·格雷格森(Isaac Gregson)
17 Mar 25 '17在3:42
#4 楼
使用换行符而不是逗号作为分隔符,列出所需目录的名称。保存该列表。mkdir `cat list`
您现在应该在列表中命名所有目录。
评论
是的,但是需要注意的是,目录名称必须是一个完整的字符串。如果一行以dir隔开,那么它将创建两个dirs,分别是dir和`dir。
– Sergiy Kolodyazhnyy
16年2月10日在18:41
是的-您甚至无法成功地对空格进行任何转义,或者-列表文件中的junk \ dir提供了两个目录,即junk \和dir。当我在目录名称中看到\时,让我感到恐慌。
–乔恩五世
16-2-11在0:02
可以将其与其他答案中提到的-p标志结合使用。如果是这样,列表文件不必自己包含父目录,它们将被检测并自动创建。
–mcw
18年7月20日在14:19
#5 楼
像这样吗(感谢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' "" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar baz foo
$
评论
只是一个printf“%s”“ $ 1” | xargs -d,mkdir应该足够了。
–muru
16年2月9日在18:53
#6 楼
因此,您要用逗号分隔目录名称列表吗?可以做到的。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 "\n
)
,但是如果要创建名称中带有空格的目录,则可能会出现问题Python
Python的相同方法是读取每一行,摆脱尾随的
/home/xieerqi/dirList.txt
,将所有内容推入一个列表,然后遍历列表项并为每个列表创建目录项目。请注意,在下面的示例中,/home/username/
是给我文件的完整路径,并且我们通过连接字符串q4312079q和从列表中读取的目录名称来组成每个新目录的完整路径。根据需要替换您自己的值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)
评论
我认为提问者实际上不希望列表用逗号分隔;我很确定那只是他们对语法可能的猜测。
– David Richerby
16年2月10日在18:23
好吧,OP可能没有完全用逗号分隔的列表,但是可以肯定的是它可以用作一种方法,要点是“列表可以使用,您也不必单独键入每个目录的名称”。尤其是当无法使用范围生成大列表(如dir {1..1000})时,这将非常有用。假设您要按用户名,项目或地理位置(例如城市)创建目录
– Sergiy Kolodyazhnyy
16年2月10日在18:46
#7 楼
mkdir命令采用多个参数,只需按以下方式运行mkdir dir1 dir2 dir3 ... dirN
如果您要创建多个子目录,则可以在{}中传递这些参数,如下所示(仅使用逗号)分隔参数,不带空格。)
mkdir dir1 dir2/{subdir1,subdir2,subdir3,subdirN} dir3 dirN
评论
男人mkdir ....任何时候如果您想知道命令是否可以完成您想做的事情,请键入man,然后输入命令名称。
@DavidRicherby尽管man mkdir“ kind of”暗示可以一次创建多个目录,但没有特别提及,也没有提及。
@JacobVlijm用于mkdir的GNU coreutils 8.21手册说,“ NAME mkdir-创建目录//概要mkdir [选项] ... [目录] ... //描述如果目录不存在,则创建目录。”显然可以建立多个目录。
@JacobVlijm没有指导的情况下,手册页的术语不是很明显,但是在手册页的技术语言中,即使在给定的引用中,信息也是完全清楚的。注意[DIRECTORY]之后的...,表示可以重复该参数。因此,DIRECTORY(ies)引用所有传递的DIRECTORY参数。但是,“ RTFM”注释有时会忘记要学习的符号。