¿Cómo puedo crear carpetas en carpetas en la terminal?

12

Tengo una carpeta llamada musicdonde dentro están todas las carpetas de artistas. ¿Hay una manera de crear estas carpetas: 1. Albums, 2. EP, 3. Singles, 4. Liveen todas las carpetas de artista con un comando?

wjandrea
fuente

Respuestas:

12

Claro, ejecute esto en la carpeta de música donde están las carpetas del artista:

for artist in */; do
   for folder in "1. Albums" "2. EP" "3. Singles" "4. Live"; do
      mkdir "$artist/$folder"
   done
done

Puede ejecutar esto en su CLI, o puede convertirlo en un script de shell al agregarlo #!/bin/shcomo la primera línea y guardarlo en un archivo. No olvide hacer que el archivo sea ejecutable.

En cuanto a lo que hace: itera sobre todos los directorios ( */) dentro del directorio actual, luego para cada uno de estos directorios, itera sobre la subcarpeta deseada (la segunda for) y luego crea la subcarpeta deseada (relativa).

jawtheshark
fuente
1
Oh, es hermoso, esto pasará a la historia ;-)
Steve
18

Es posible que desee poner sus llaves {rizadas} para este

Por el bien de este argumento vamos a pretender ./music no existe

En su directorio base para ./music usaremos el comando -p para crear subdirectorios donde sea necesario y las llaves se usarán para crear una pequeña matriz

El comando -pes corto para los padres, si es más fácil de recordar puede usar --parenten su lugar

mkdir -p ./music/{"1. Albums","2. EP","3. Singles","4. Live"}

Si desea jugar con esto, puede, por ejemplo

mkdir -p ./folder/prefix{a{1/only,2,3},b,c}suffix/more{z,y,x}

Tiene expresiones anidadas, puede insertar las llaves en el medio de una cadena y también puede permitir que el subdirectorio haga lo mismo, y puede ser específico con sus subdirectorios para una matriz particular

Le sugiero que cree un archivo en algún lugar donde pueda hacer sus propias plantillas con dichos comandos y darles descripciones

Visite esta página para obtener más información https://www.linuxjournal.com/content/bash-brace-expansion y https://www.linux.com/tutorials/all-about-curly-braces-bash/

Steve
fuente
55
Personalmente, me gusta más esta respuesta, porque no necesita que pienses como programador. Raramente uso el método de llaves, pero es mucho más elegante.
jawtheshark
66
OP quiere que el 4 subdirectorio se coloque dentro de cada subdirectorio music, por lo que el mkdir./music/*/{"1. Albums","2. EP","3. Singles","4. Live"}
argumento
1
FYI, -pes la forma abreviada de --parent.
Amedee Van Gasse