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 globstar
en su~/.bashrc
) o zsh:En otras conchas:
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 archivoHay un comando más complejo
find
que es más rápido si tiene muchos archivos, ya que no necesita invocar unmv
proceso separado para cada archivo:Al
+
final le dicefind
que invoque el comando en varios archivos a la vez. Comofind
solo puede poner los nombres de archivo al final de la línea de comando ymv
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 defind
expansió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
-exec
así:fuente
find -exec
tenga en cuenta que es mucho más seguro; lo anterior fallará en los nombres de archivos que contienen espacios en blanco, por ejemplo.