Mover todos los archivos de directorios un paso hacia arriba
Pregunta
Tengo un directorio que se ve así
fool@brat:/mydir/ucsc_mm8> tar -xvf *.tar
1/chr1.fa.masked
1/chr1_random.fa.masked
2/chr2.fa.masked
3/chr3.fa.masked
4/chr4.fa.masked
5/chr5.fa.masked
5/chr5_random.fa.masked
19/chr19.fa.masked
Un/chrUn_random.fa.masked
Lo que quiero hacer es mover todos los " *. enmascarados " archivos en los subdirectorios / 1
hasta / Un
.
¿Existe una forma compacta de hacerlo en Linux / Unix?
Solución
La forma típica de mover archivos que coinciden con una expresión particular es
mv 1/*.masked targetDir
donde targetDir podría estar ..
Si desea moverlo desde los directorios 1,2,3, puede hacer algo como
mv */*.masked targetDir
O, si desea moverlo específicamente desde directorios numerados, puede ejecutar algo como
mv [0-9][0-9]/*.masked targetDir
Otros consejos
Muchos shells de Unix también admiten el operador * en la parte del directorio de la ruta. Lo siguiente funciona al menos en bash y zsh:
ls */*.masked
Esto devolverá todos los archivos que terminen en .masked un directorio más profundo.
Entonces, para moverlos:
mv */*.masked destination
mv */*.masked .