Se eu quisesse criar vários diretórios (no mesmo nível) e depois alimentá-lo com uma lista separada por vírgulas de nomes de diretórios (ou algo nesse sentido)?
command-line
directory
coreutils
mkdir
BGroat
fonte
fonte
man mkdir
....man
seguido do nome do comando.man mkdir
"tipo de" sugira a possibilidade de criar vários diretórios de uma vez, não é mencionado especificamente, nem como fazer isso....
depois[DIRECTORY]
, significando que o argumento pode ser repetido. Portanto,DIRECTORY(ies)
refere-se a todos osDIRECTORY
argumentos passados . No entanto, os comentários "RTFM" às vezes esquecem que existe uma notação a ser aprendida.Respostas:
Resposta curta
mkdir
recebe vários argumentos, basta executarfonte
Você pode usar listas para criar diretórios e isso pode ficar bem selvagem.
Alguns exemplos para fazer as pessoas pensarem sobre isso:
test01
atétest10
.Então, se eu entendi direito e você deseja criar alguns diretórios e, dentro deles, novos diretórios, você pode fazer o seguinte:
e obtenha sa1, sa2, ..., sa10 e dentro de cada dirs 1, 2 e 3.
fonte
dash
padrão/bin/sh
do Ubuntu.mkdir sa$(seq 0.1 0.1 1)
, tudo o que ele faz é criar um diretório chamado sa0.1 e o restante 0.2, 0.3, ..., 1. Como posso obter expansão de chaves decimais sem escrever a lista inteira?É muito simples, permite criar uma estrutura de diretórios como:
Você pode fazer isso em um único comando como este:
Cuidado para não entrar em nenhum espaço
fonte
Faça uma lista dos nomes para os diretórios desejados usando quebras de linha em vez de vírgulas como separador. Salve essa lista.
Agora você deve ter todos os diretórios nomeados em sua lista.
fonte
spaced dir
, ela criará duas direçõesspaced
e `dir.junk\ dir
nolist
arquivo fornece dois diretóriosjunk\
edir
. Fiquei em pânico quando vi um\
nome de diretório.-p
bandeira mencionada em outras respostas. Nesse caso, olist
arquivo não precisa incluir os diretórios pai como suas próprias linhas, eles serão detectados e criados automaticamente.Algo assim? (graças a muru pela
printf
dica)Você pode agrupá-lo em uma função para facilitar o uso:
fonte
printf "%s" "$1" | xargs -d, mkdir
deve ser suficiente.Então você quer uma lista separada por vírgula de nomes de diretório? Isso pode ser feito.
Shell + coreutils
Como todo mundo está postando oneliners, aqui está o meu também (mkdir + substituição de parâmetro mais + redirecionamento de shell).
AWK
O AWK é uma linguagem de processamento de texto, mas possui uma
system()
função muito interessante que chamará o shell padrão e executará comandos entre parênteses (que devem ser uma sequência).Ou você pode remover
,
comgsub()
function e chamar,system("mkdir "$0)
mas isso pode ser um problema se você deseja criar diretórios com espaços em seus nomesPitão
A maneira pitônica de fazer o mesmo seria ler cada linha, livrar-se do final
\n
, colocar tudo em uma lista e iterar sobre os itens da lista e criar diretórios por item da lista. Observe que, no exemplo abaixo,/home/xieerqi/dirList.txt
é o caminho completo fornecido ao meu arquivo, e criamos o caminho completo de cada novo diretório juntando string/home/username/
e o nome do diretório lido na lista. Substitua seus próprios valores conforme necessáriofonte
dir{1..1000}
. Digamos, você deseja criar um diretório por nome de usuário, projeto ou localização geográfica, como uma cidadeO comando mkdir usa vários argumentos, basta executar como abaixo
Se você deseja criar vários subdiretórios, pode passar esses argumentos em {}, como mostrado abaixo (use apenas vírgulas para separar o argumento, sem espaços).
fonte