Todavía no estoy muy familiarizado con todos los trucos grep/find/awk/xargs.
Tengo algunos archivos que coinciden con un patrón particular, por ejemplo *.xxx. Estos archivos están en lugares aleatorios en un determinado directorio. ¿Cómo puedo encontrar todos esos archivos y moverlos a una carpeta en mi directorio de inicio en Unix (que puede que aún no exista)?

Respuestas:
fuente
mv -i -t ~/dst {} +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:En otras conchas:
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 archivoHay un comando más complejo
findque es más rápido si tiene muchos archivos, ya que no necesita invocar unmvproceso separado para cada archivo:Al
+final le dicefindque invoque el comando en varios archivos a la vez. Comofindsolo puede poner los nombres de archivo al final de la línea de comando ymvnecesita 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 defindexpansión de{}).fuente
Si desea replicar la estructura de directorios de los archivos de origen coincidentes en el nuevo directorio de destino, puede utilizar la opción --parents de GNU cp :
fuente
se puede utilizar sin hallazgo
-execasí:fuente
find -exectenga en cuenta que es mucho más seguro; lo anterior fallará en los nombres de archivos que contienen espacios en blanco, por ejemplo.