Mover dos archivos específicos a su carpeta principal dentro de varios directorios con nombres únicos

Mover dos archivos específicos a su carpeta principal dentro de varios directorios con nombres únicos

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.txto fileB.txta su directorio principal inmediato:

find . -maxdepth 4 -type f -name 'file[AB].txt' -execdir mv {} ../ \;

O, para mover cualquier archivo con nombre fileA.txto fileB.bba su directorio principal inmediato:

find . -maxdepth 4 -type f \( -name 'fileA.txt' -o -name 'fileB.bb' \) -execdir mv {} ../ \;

Cómo funciona

  • .le indica findque comience con el directorio actual. (Puedes reemplazar esto con cualquier directorio que desees.

  • -maxdepth 4le indica findque no descienda más de cuatro niveles de profundidad en la estructura del directorio.

  • -type f le indica findque busque solo archivos normales.

  • -name 'file[AB].txt'le indica findque busque solo archivos que coincidan con el globo file[AB].txt.

    Alternativamente, para hacer coincidir fileA.txto fileB.bb, utilizamos dos -namepruebas combinadas con un o lógico ( -o) y agrupadas con pares:

    \( -name 'fileA.txt' -o -name 'fileB.bb' \)
    
  • -execdir mv {} ../ \;le indica findque vaya al directorio del archivo y ejecute el comando de shell mv {} ../donde findse reemplazará {}con el nombre real del archivo. La expresión ../en lenguaje Unix significa directorio principal. El final \;simplemente marca findel final del comando de shell

información relacionada