Supongamos que tengo una estructura de directorios como esto:
$ [~ / Práctica ls] a B C D/
Ahora quiero crear un directorio tmp1
de todos los subdirectorios de practice
y hago esto:
$ [~ / Práctica] * mkdir / tmp1 mkdir: no se puede crear el directorio `* / tmp1' : No existe el fichero o directorio
Entonces trato del -p
interruptor 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 -p
interruptor es crear varios directorios inexistentes. Sólo pensé que podría ayudar.
¿Cómo se crea tmp1
en todos los subdirectorios a la vez?
Si esto puede hacerse, ¿cómo lo extiendo a crear \tmp1
, \tmp2
, \tmp3
en \a
, \b
y \c
a la vez?
Editar: echaba de menos mencionar que los directorios no tienen que ser simples y con el fin, como a
, b
, c
etc., 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}; done
fuente
for i in */; do mkdir "$i/itemone" "$i/itemtwo"; done
para 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:$^var
activa 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
dirs
también contendría enlaces simbólicos a directorios. En la solución zsh, cambie*(/)
a*(-/)
si desea incluir enlaces simbólicos a directorios.fuente
-p
indicador.Portablemente, recorra los directorios principales:
Agregue
--
despuésmkdir
si puede tener directorios cuyo nombre comienza con-
.En zsh, puede hacerlo en un solo comando con el
e
calificador glob :pero es más rápido escribir esto como dos comandos:
fuente
mkdir -- whatever
y omitir--
si tiene la intención de expandir lo que sea que se tome como opciones para elmkdir
comando". 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