有没有办法用 mkdir 一次创建多个目录?

有没有办法用 mkdir 一次创建多个目录?

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

答案1

简短回答

mkdir接受多个参数,只需运行

mkdir dir_1 dir_2

答案2

您可以使用列表来创建目录,这可能会变得非常疯狂。

以下举几个例子来引发人们的思考:

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. 从 sa1 到 sa50 的 50 个目录
  2. 相同,但每个目录将保存 50 次 sax1 到 sax50(如果不存在父目录,-p 将创建父目录。
  3. 从 a12345 到 z12345 的 26 个目录
  4. 逗号分隔的列表构成目录 1、2 和 3。
  5. 10 个目录从test01test10
  6. 与 4 相同,但以当前日期作为目录,并且其中包含 1,2,3。
  7. 与 4 相同,但以当前用户作为目录,并在其中包含 1、2、3。

所以,如果我理解正确的话,并且您想要创建一些目录,并在其中创建新目录,那么您可以这样做:

mkdir -p sa{1..10}/{1,2,3}

并获取 sa1、sa2、…、sa10 以及每个目录 1、2 和 3。

答案3

它非常简单,让您创建一个目录结构,例如:

Websites/
  static/
      cs
      js
  templates/
      html and xhtml

您可以使用如下一个命令来完成此操作:

mkdir -p Website/{static/{cs,js},templates/html\ and\ xhtml}

请小心转义目录名称中的空格。

答案4

像这样吗?(感谢 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
$ 

相关内容