Tengo la siguiente estructura de directorios:
Main_Dir
|
-----------------------------------
Subdir1 Subdir2 Subdir3
| | |
--------- --------- ---------
| | | | | | | | |
fo1 fo2 f03 fo1 fo2 f03 fo1 fo2 f03
Quiero copiar todos los subdirectorios ( Subdir1
, Subdir2
, Subdir3
) en una nueva carpeta. Pero solo quiero copiar fo1
y fo2
carpetas en el nuevo lugar.
No estoy seguro de cómo podría hacerse.
Respuestas:
Si el árbol de directorios es más que sólo
..../f03
puede utilizar estersync
comando para copiar cadafo1
Yfo2
y excluyen cualquier otro directorio con el nombrefo*
.Cuando trato con este tipo de escenarios de copia, siempre uso
rsync
y es--dry-run
y--verbose
modifica para poder ver lo que va a hacer sin tener que copiar los archivos.Ejemplo
Carrera en seco.
Si desea ver parte de
rsync
la lógica interna de lo que se incluye / excluye, utilice el--verbose
interruptor.Si necesita excluir otras formas de directorios, puede agregar varias exclusiones.
fuente
Uso
rsync
:fuente
Podrías probar algo como esto:
El
find
comando devuelve todos los subdirectorios directos de Main_Dir.basename
devolverá el nombre del subdirectorio encontrado (por ejemplo,basename Main_Dir/Subdir1
devolucionesSubdir1
). A continuación, utiliza la cáscara de la expansión de llaves a la tipificación evitarfo1
yfo2
múltiples veces y copiarlos en el recién creadonew_dir/$(basename $subdir)
directorio.En el caso específico en el que menciona donde solo hay directorios debajo
Main_Dir
y donde no hay espacios o caracteres extraños en los nombres, puede simplificar lo anterior parafuente
Si la estructura de su directorio es exactamente como en su ejemplo (es decir, todos los
fo
archivos están en el mismo nivel):fuente