Существует ли способ создать несколько каталогов сразу с mkdir?

Если я хотел создать несколько каталогов (на том же уровне) и затем подать его, запятая разделила список имен каталогов (или что-то к тому эффекту)?

115
задан 10 February 2016 в 04:52

7 ответов

Короткий ответ

mkdir принимает несколько аргументов, просто запустите

mkdir dir_1 dir_2
149
ответ дан 22 November 2019 в 22:58

Вы можете использовать списки для создания каталогов, и это может быть довольно диким.

Некоторые примеры, чтобы заставить людей задуматься об этом:

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. 50 каталогов от sa1 до sa50
  2. одинаковые, но каждый из каталогов будет содержать 50 раз от sax1 до sax50 ( -p создаст родительские каталоги, если они не существуют.
  3. 26 каталогов от a12345 до z12345
  4. список, разделенный запятыми, создает каталоги 1, 2 и 3.
  5. 10 каталогов из test01 - test10.
  6. То же, что 4, но с текущей датой в качестве каталога и 1,2,3 в нем.
  7. То же, что 4, но с текущим пользователем в качестве каталог и 1,2,3 в нем.

Итак, если я правильно понял, и вы хотите создать несколько каталогов, а внутри них новые каталоги, то вы можете сделать это:

[ 111]

и получить sa1, sa2, ..., sa10 и внутри каждого dir 1, 2 и 3.

154
ответ дан 22 November 2019 в 22:58

Это очень просто, позволяет Вам хотеть создать структуру каталогов, такую как:

Websites/
  static/
      cs
      js
  templates/
      html

можно сделать это в единственной команде как это:

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

Бояться вводить любые пробелы

27
ответ дан 22 November 2019 в 22:58

Составьте список названий Ваших желаемых каталогов с помощью разрывов строки вместо запятых как разделитель. Сохраните тот список.

mkdir `cat list`

у Вас должны теперь быть все каталоги, названные в Вашем списке.

14
ответ дан 22 November 2019 в 22:58

Что-то вроде этого? (благодаря 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
$ 
8
ответ дан 22 November 2019 в 22:58

Команда mkdir принимает несколько аргументов, просто запустите, как показано ниже

mkdir dir1 dir2 dir3 ... dirN

Если вы хотите создать несколько подкаталогов, вы можете передать этот аргумент в {}, как показано ниже

mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN
1
ответ дан 22 November 2019 в 22:58

Таким образом, Вы хотите список разделенных запятой значений имен каталогов? Это может быть сделано.

Shell + coreutils

Так как все отправляют остроты, здесь является моим также (mkdir + замена параметра плюс + перенаправление оболочки).

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() функция, которая назовет оболочку по умолчанию и команду выполнения [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 , пихните все в один список, и выполните итерации по элементам списка и создайте директоров на элемент списка. Обратите внимание на это в реве в качестве примера, /home/xieerqi/dirList.txt полный путь, данный моему файлу, и мы составляем полный путь каждого нового каталога путем присоединения к строке /home/username/ и имя dir, считанное из списка. Замените своими собственными значениями по мере необходимости

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)
7
ответ дан 22 November 2019 в 22:58

Другие вопросы по тегам:

Похожие вопросы: