mkdir com problema de comando seq

0

Eu preciso criar 5 diretórios (name1, name2, name3, name4, name5) pela linha de comando usando mkdir e seq .

Se eu usar:

mkdir name{'seq -s , 1 5'}

Resulta em um diretório: name{1,2,3,4,5}

Qual comando devo usar em vez disso?

    
por deebian 16.10.2017 / 00:46

2 respostas

3

seq 1 42 | mkdir name{1..5}

Ou, se você não precisar da resposta para Life, the Universe e Everything, elimine o seq e deixe a chave do Bash expandir o trabalho por si só:

mkdir name{1..5}

Mas, se você realmente precisar usar seq , porque isso é lição de casa:

mkdir $(seq -f "name%d" 5)
    
por 16.10.2017 / 04:36
2

Se por algum motivo você não quiser apenas usar a expansão de contraventamento (veja também abaixo), pode considerar:

seq 5 | xargs -I N mkdir nameN

Isso cria name1 , name2 , name3 , name4 e name5 . Ele funciona mesmo se o seu shell não suportar a expansão de chave (mas bash ). O comando xargs constrói e executa comandos. Esse comando específico xargs executa comandos como mkdir nameN , mas com N substituído por cada palavra da entrada (que é canalizada de seq ). Corra man xargs ou leia esta página para mais informações sobre a opção -I .

Se isso é para uma tarefa de casa, talvez você não tenha permissão para usar um terceiro comando ( xargs ). Mas na "vida real", é menos provável que você tenha essa restrição. Além disso, se você está fazendo isso para fins de aprendizado, é uma oportunidade de aprender o comando xargs - se você ainda não o conhece - o que é útil em uma variedade de situações.

Você também pode usar um loop de shell, conforme AlexP sugeriu (%código%). O for d in $(seq 5); do mkdir name$d; done loop usa a sintaxe for $( para executar substituição de comandos para obter a lista ) de 1 2 3 4 5 , em seguida, usa expansão de parâmetro ( seq ) para formar o nome do diretório em cada comando $d .

Você deve estar ciente de que todos esses métodos se baseiam na ausência de espaço em branco nos nomes de diretório, embora seja possível modificá-los para que não ocorram.

Mas você está usando mkdir e, como muitos shells , ele suporta expansão de brace . Agora, talvez você precise que seu script seja portátil para shells que não (como bash ). Se é isso que você precisa, você não deve usar a expansão de chaves. Caso contrário, você deve seguir a recomendação de Jeff Schaller de simplesmente escrever dash .

    
por 16.10.2017 / 05:26