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 globstar
en 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 find
comando:
.
: 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 find
que es más rápido si tiene muchos archivos, ya que no necesita invocar un mv
proceso separado para cada archivo:
find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} +
Al +
final le dice find
que invoque el comando en varios archivos a la vez. Como find
solo puede poner los nombres de archivo al final de la línea de comando y mv
necesita 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 find
expansión de {}
).