Supongamos que tengo una estructura de directorios como esto:
$ [~ / Práctica ls] a B C D/
Ahora quiero crear un directorio tmp1de todos los subdirectorios de practicey hago esto:
$ [~ / Práctica] * mkdir / tmp1 mkdir: no se puede crear el directorio `* / tmp1' : No existe el fichero o directorio
Entonces trato del -pinterruptor y me EndUp con un directorio llamado *con un subdirectoriotmp1
$ [~ / Práctica] mkdir -p * / tmp1 $ [~ / Práctica ls] */ a B C D/
Sé que el uso del -pinterruptor es crear varios directorios inexistentes. Sólo pensé que podría ayudar.
¿Cómo se crea tmp1en todos los subdirectorios a la vez?
Si esto puede hacerse, ¿cómo lo extiendo a crear \tmp1, \tmp2, \tmp3en \a, \by \ca la vez?
Editar: echaba de menos mencionar que los directorios no tienen que ser simples y con el fin, como a, b, cetc., y el directorio que se cree no es necesariamente igual tmp1, tmp2.
$ [~ / Práctica ls] perro / gato / rata /
En ellos, me gustaría tener algo como
$ [~ / practica] ls * perro: rojo azul/ gato: rojo azul/ rata: rojo azul/

Respuestas:
Con globos :
NOTA
*/como un globoSi desea crear múltiples subdirecciones a la vez:
for dir in */; do mkdir -- "$dir"/{tmp1,foo,bar,qux}; donefuente
for i in */; do mkdir "$i/itemone" "$i/itemtwo"; donepara varios nombres de directorio no ordenados?fuente
Con GNU o BSD * encuentre:
o usando la expansión de parámetros:
* Incluye OS X
fuente
find . -name . -o -prune -type d -exec sh -c 'exec mkdir "$1/newdir"' sh {} \;Fuera del tema ya que estás mencionando
bash, pero para el registro, con zsh, harías:$^varactiva la expansión en forma de llave para la expansión de la matriz. Es una reminiscencia derc's^operador y enrc(o su derivadoes), que iba a escribir que:Sin embargo, tenga en cuenta (y lo mismo se aplica a las soluciones bash dadas aquí) que en la solución rc
dirstambién contendría enlaces simbólicos a directorios. En la solución zsh, cambie*(/)a*(-/)si desea incluir enlaces simbólicos a directorios.fuente
-pindicador.Portablemente, recorra los directorios principales:
Agregue
--despuésmkdirsi puede tener directorios cuyo nombre comienza con-.En zsh, puede hacerlo en un solo comando con el
ecalificador glob :pero es más rápido escribir esto como dos comandos:
fuente
mkdir -- whatevery omitir--si tiene la intención de expandir lo que sea que se tome como opciones para elmkdircomando". No tiene sentido omitir--aquí. Puede que no sea un problema en el caso del OP, pero es uno en el caso general. Creo que tenemos el deber de enseñar la sintaxis correcta y segura aquí.--y citas y grandes advertencias cuando no se admiten nuevas líneas. En un contexto de línea de comandos, prefiero mostrar la versión rápida que funciona en la práctica primero, y la versión a prueba de balas como complemento.Puedes hacer eso así:
fuente
Variación en la respuesta de sputnick que evita los archivos que no son de directorio:
fuente
if [ -d "$x" ];…?Este es uno bueno de los antiguos Unix Masters (probado en FreeBSD 10.1) si desea controlar la versión (con el registro RCS bloqueado: ci -l con un breve comentario como ir: para la versión inicial) sus archivos de configuración / etc / * en ~ / .his / etc
fuente
Debiera ser \! nombre "RCS" y funciona mejor en el primer registro.
sudo find ~ / .his / etc \! -name "RCS" -ls
sudo find -d ~ / .his / etc \! -nombre "RCS" | xargs sudo ci -l -mir -t-ir
Este último también funciona muy bien para el cjeck en parte filtrando todo el contenido RCS en el nombre del archivo:
sudo find -d ~ / .his / etc -type f | grep -v RCS | xargs sudo ci -l -mir -t-ir
fuente
Esto es de gran ayuda para mí. Tenía la necesidad de crear un conjunto de subdirectorios en varias carpetas y algo así como:
funcionó muy bien, excepto cuando se encuentra un espacio en blanco. ¿Hay alguna manera de ignorar espacios en la
*/*/parte de los argumentos?fuente