如果我想创建多个目录(在同一级别上),然后以逗号分隔的目录名称列表(或类似的名称)提供给它?

评论

男人mkdir ....

任何时候如果您想知道命令是否可以完成您想做的事情,请键入man,然后输入命令名称。

@DavidRicherby尽管man mkdir“ kind of”暗示可以一次创建多个目录,但没有特别提及,也没有提及。
@JacobVlijm用于mkdir的GNU coreutils 8.21手册说,“ NAME mkdir-创建目录//概要mkdir [选项] ... [目录] ... //描述如果目录不存在,则创建目录。”显然可以建立多个目录。

@JacobVlijm没有指导的情况下,手册页的术语不是很明显,但是在手册页的技术语言中,即使在给定的引用中,信息也是完全清楚的。注意[DIRECTORY]之后的...,表示可以重复该参数。因此,DIRECTORY(ies)引用所有传递的DIRECTORY参数。但是,“ RTFM”注释有时会忘记要学习的符号。

#1 楼

简短答案
mkdir带有多个参数,只需运行
mkdir dir_1 dir_2


#2 楼

您可以使用列表来创建目录,并且目录会变得很疯狂。

一些示例使人们开始思考它: />从sa1到sa50的50个目录
相同,但每个目录将保存sax1到sax50的50倍(-p将创建父目录(如果不存在)。 />以逗号分隔的列表将第1、2和3个目录从test01test10划分为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