Você pode apenas cut
o 1
st slash- d
elimited de cada linha e fornecer a lista para mkdir
:
mkdir $(<dirlist.txt cut -d/ -f1)
Exemplo de execução
$ cat dirlist.txt
A1/A2/A3
B1/B2/B3
C1/C2/C3
$ ls
dirlist.txt
$ mkdir $(<dirlist.txt cut -d/ -f1)
$ ls
A1 B1 C1 dirlist.txt
Você pode encontrar problemas ARG_MAX se sua lista contiver um número enorme de nomes de diretório , neste caso use GNU parallel
ouxargs
daseguinteforma:
parallel mkdir :::: <(<dirlist.txt cut -d/ -f1)
xargs -a<(<dirlist.txt cut -d/ -f1) mkdir
Embora parallel
tenha sido coberto, a abordagem xargs
não funcionará se os nomes dos diretórios contiverem espaços - você pode usar
como o delimitador de linha ou simplesmente instruir xargs
para dividir somente a entrada em caracteres de nova linha (como proposto por Martin Bonner ): awk
xargs -0a<(<dirlist.txt tr \{n,0} | cut -d/ -f1 -z) mkdir # \{n,0} equals \n \0
xargs -d\n -a<(<dirlist.txt cut -d/ -f1) mkdir
No caso de qualquer um dos campos conter um caractere de nova linha, seria necessário identificar os finais de linha "verdadeiros" e substituir apenas os caracteres de nova linha por, por exemplo, %código%. Isso seria um caso para %code% , mas acho que é muito improvável aqui.