Mueva solo un determinado subdirectorio a una nueva carpeta con un script de shell

Mueva solo un determinado subdirectorio a una nueva carpeta con un script de shell

Tengo una carpeta Accountsque contiene cuentas de correo, todas estas carpetas tienen una carpeta Archive.folder. Quiero mover todas las carpetas de archivo con un script simple a una carpeta nueva.

Intenté esto hasta ahora:

find . -mindepth 1 -maxdepth 1 ! -name archive -exec mv -t testnew/ {} + 

Pero mueve todas las carpetas, no sólo las llamadas archivo. Quiero encontrar todas las carpetas en la carpeta actual llamada archivo y moverlas a la carpeta testnew/. La ruta a la carpeta movida debe ser la misma que antes.

Situación existente:

Accounts
    - 1
          - archive
          - inbox
          - folder2
    - 2
          - archive
          - inbox
          - folder2

    - 3
          - archive
          - inbox
          - folder2

Cómo debería verse:

testnew
    - 1
          - archive
    - 2
          - archive
    - 3
          - archive

Respuesta1

Si está bien hacer esto de forma interactiva, vidirpuede ser una buena manera. Veresta respuesta.

En tu caso el procedimiento será como:

  1. cd /path/to/Accounts
    find . -type d -name archive | vidir -
    
  2. vidirejecutará un editor de texto. Utilice "buscar y reemplazar" y reemplace cada encabezado ./con la ruta que desee, de modo que las líneas coincidan con la estructura de directorio deseada. Las rutas pueden ser absolutas o relativas y pueden contener archivos ../. Por ejemplo, puedes convertir esto fácilmente

    ./1/archive
    ./2/archive
    ./3/archive
    

    dentro de esto

    ../testnew/1/archive
    ../testnew/2/archive
    ../testnew/3/archive
    
  3. Guarde el archivo editado y salga del editor.

Notas:

  • Si su estructura de directorio contiene directorios con nombres que terminan en .(por lo que ./la subcadena no solo aparece al principio), entonces será mejor reemplazarlos <TAB>./con <TAB>whatever/path/you/want/, donde <TAB>indica el carácter de tabulación. Depende del editor si y cómo puede incluir este carácter en "buscar y reemplazar".
  • Elija su editor especificando EDITOR, por ejemplo find … | EDITOR=kate vidir -.
  • vidirno puede mover archivos entre sistemas de archivos. Si todos archivelos directorios pertenecen a un sistema de archivos y desea testnewestar en otro sistema de archivos, cree testnewen el sistema de archivos de origen, utilícelo vidiry finalmente muévase testnewal sistema de archivos de destino.
  • Al final deesta otra respuestaExiste un enfoque experimental que (ab)utiliza EDITORpara hacer vidirque no sea interactivo. Sin embargoLo encuentro vidirútil en casos como el suyo principalmente porque me permite asegurarme de que las rutas resultantes sean realmente las que quiero antes de que se produzca cualquier cambio de nombre/movimiento. Si me equivoco en algo, puedo cancelar sin guardar los cambios.Si desea una solución no interactiva a su problema, entonces vidirno es la mejor herramienta.

información relacionada