Resposta curta
mkdir
recebe vários argumentos, basta executar
mkdir dir_1 dir_2
Se eu quisesse criar vários diretórios (no mesmo nível) e, em seguida, fornecer uma lista separada por vírgulas de nomes de diretórios (ou algo assim)
mkdir
recebe vários argumentos, basta executar
mkdir dir_1 dir_2
Você pode usar listas para criar diretórios e pode ficar bem louco.
Alguns exemplos para fazer as pessoas pensarem sobre isso:
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
a test10
. Então, se eu entendi corretamente e você quer criar alguns diretórios, e dentro deles novos diretórios, então você poderia fazer isso:
mkdir -p sa{1..10}/{1,2,3}
e obtenha sa1, sa2, ..., sa10 e dentro de cada dirs 1, 2 e 3.
É muito simples, permite criar uma estrutura de diretórios como:
Websites/
static/
cs
js
templates/
html
Você pode fazer isso em um único comando assim:
mkdir -p Website/{static/{cs,js},templates/html}
Cuidado para não inserir espaços
Faça uma lista dos nomes dos seus diretórios desejados usando quebras de linha em vez de vírgulas como separador. Salve essa lista.
mkdir 'cat list'
Agora você deve ter todos os diretórios nomeados em sua lista.
Algo como isso? (graças ao muru pela printf
tip)
printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
$ printf '%s' 'foo,bar,baz' | xargs -d, mkdir
$ ls
bar baz foo
$
Você pode envolvê-lo em uma função para facilitar o uso:
function mkdir_cs {
printf '%s' "$1" | xargs -d, mkdir
}
$ ls
$ mkdir_cs 'foo,bar,baz'
$ ls
bar baz foo
$
Então você quer uma lista separada por vírgulas de nomes de diretórios? Isso pode ser feito.
Shell + coreutils
Já que todo mundo está postando oneliners, aqui está o meu também (mkdir + substituição de parâmetro mais + redirecionamento de 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
O AWK é uma linguagem de processamento de texto, mas tem uma função system()
muito boa que chama o shell padrão e executa o comando [s] entre parênteses (que deve ser uma string).
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
Ou você pode remover a função ,
with gsub()
e chamar system("mkdir "$0)
, mas isso pode ser um problema se você quiser criar diretórios com espaços em seus nomes
Python
A maneira Pythonic de fazer o mesmo, seria ler cada linha, livrar-se de \n
, colocar tudo em uma lista e iterar sobre os itens da lista e criar diretórios por item da lista. Note que no exemplo abaixo, /home/xieerqi/dirList.txt
é o caminho completo dado ao meu arquivo, e nós criamos o caminho completo de cada novo diretório unindo a string /home/username/
e o nome do diretório lido da lista. Substitua seus próprios valores conforme necessário
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)
O comando mkdir leva vários argumentos, simplesmente execute como abaixo
mkdir dir1 dir2 dir3 ... dirN
Se você quiser criar vários subdiretórios, poderá transmitir esses argumentos em {}, conforme mostrado abaixo
mkdir dir1 dir2/{subdir1, subdir2, subdir3, subdirN} dir3 dirN