
Tengo una carpeta Accounts
que 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, vidir
puede ser una buena manera. Veresta respuesta.
En tu caso el procedimiento será como:
cd /path/to/Accounts find . -type d -name archive | vidir -
vidir
ejecutará 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
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 ejemplofind … | EDITOR=kate vidir -
. vidir
no puede mover archivos entre sistemas de archivos. Si todosarchive
los directorios pertenecen a un sistema de archivos y deseatestnew
estar en otro sistema de archivos, creetestnew
en el sistema de archivos de origen, utilícelovidir
y finalmente muévasetestnew
al sistema de archivos de destino.- Al final deesta otra respuestaExiste un enfoque experimental que (ab)utiliza
EDITOR
para hacervidir
que no sea interactivo. Sin embargoLo encuentrovidir
ú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, entoncesvidir
no es la mejor herramienta.