Si desea mover todos los archivos dentro de una jerarquía de directorios a un solo directorio de destino, en bash ≥4 (poner shopt -s globstaren su ~/.bashrc) o zsh:
mkdir ~/new-directory
mv -i **/*.xxx ~/new-directory
En otras conchas:
mkdir ~/new-directory
find . -name '*.xxx' -exec mv -i {} ~/new-directory \;
Cómo leer este findcomando:
.: atraviesa el directorio actual
-name '*.xxx': actuar en archivos cuyo nombre coincide con este patrón
-exec … \;: ejecuta este comando en cada archivo, reemplazándolo {}por la ruta al archivo
Hay un comando más complejo findque es más rápido si tiene muchos archivos, ya que no necesita invocar un mvproceso separado para cada archivo:
find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} +
Al +final le dice findque invoque el comando en varios archivos a la vez. Como findsolo puede poner los nombres de archivo al final de la línea de comando y mvnecesita tener el directorio de destino al final, usamos un shell intermedio para reorganizar los argumentos ( "$0"es el primer argumento para el shell ~/new-directory, y "$@"son los argumentos subsiguientes que provienen de findexpansión de {}).