
Necesito mover dos archivos específicos, los llamaremos fileA.txt y fileB.sh a su carpeta principal.
Uno de estos archivos es genérico pero el otro archivo es específico de su carpeta principal y no se puede copiar a todas las carpetas.
La jerarquía de carpetas es así:Jerarquía de carpetas
La carpeta principal es única y debe permanecer igual. Hay más de 2000 carpetas en total ubicadas en subcarpetas de 200 a 300 carpetas principales que contienen las carpetas secundarias.
Lo que tengo hasta ahora que en BASH no funciona es:
find -maxdepth 4 -type f -name ‘*.bb’ ‘*.txt’; mv ../.
Soy MUY nuevo en el mundo de las secuencias de comandos y sé que es una tarea muy sencilla. Pido disculpas por el terrible dibujo pero me he golpeado la cabeza contra la pared durante demasiado tiempo.
Respuesta1
Para mover cualquier archivo con nombre fileA.txt
o fileB.txt
a su directorio principal inmediato:
find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;
O, para mover cualquier archivo con nombre fileA.txt
o fileB.bb
a su directorio principal inmediato:
find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;
Cómo funciona
.
le indicafind
que comience con el directorio actual. (Puedes reemplazar esto con cualquier directorio que desees.-maxdepth 4
le indicafind
que no descienda más de cuatro niveles de profundidad en la estructura del directorio.-type f
le indicafind
que busque solo archivos normales.-name 'file[AB].txt'
le indicafind
que busque solo archivos que coincidan con el globofile[AB].txt
.Alternativamente, para hacer coincidir
fileA.txt
ofileB.bb
, utilizamos dos-name
pruebas combinadas con un o lógico (-o
) y agrupadas con pares:\( -name 'fileA.txt' -o -name 'fileB.bb' \)
-execdir mv {} ../ \;
le indicafind
que vaya al directorio del archivo y ejecute el comando de shellmv {} ../
dondefind
se reemplazará{}
con el nombre real del archivo. La expresión../
en lenguaje Unix significa directorio principal. El final\;
simplemente marcafind
el final del comando de shell