Если я хотел создать несколько каталогов (на том же уровне) и затем подать его, запятая разделила список имен каталогов (или что-то к тому эффекту)?
mkdir
принимает несколько аргументов, просто запустите
mkdir dir_1 dir_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}
test01
- test10
. Итак, если я правильно понял, и вы хотите создать несколько каталогов, а внутри них новые каталоги, то вы можете сделать это:
[ 111]и получить sa1, sa2, ..., sa10 и внутри каждого dir 1, 2 и 3.
Это очень просто, позволяет Вам хотеть создать структуру каталогов, такую как:
Websites/
static/
cs
js
templates/
html
можно сделать это в единственной команде как это:
mkdir -p Website/{static/{cs,js},templates/html}
Бояться вводить любые пробелы
Составьте список названий Ваших желаемых каталогов с помощью разрывов строки вместо запятых как разделитель. Сохраните тот список.
mkdir `cat list`
у Вас должны теперь быть все каталоги, названные в Вашем списке.
Что-то вроде этого? (благодаря 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
$
Команда mkdir принимает несколько аргументов, просто запустите, как показано ниже
mkdir dir1 dir2 dir3 ... dirN
Если вы хотите создать несколько подкаталогов, вы можете передать этот аргумент в {}, как показано ниже
mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN
Таким образом, Вы хотите список разделенных запятой значений имен каталогов? Это может быть сделано.
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)