¿Cómo puedo encontrar solo los archivos * .mp3 con un comando recursivo como ls -R *.mp3
en un directorio que contiene varios subdirectorios y, al final, copiar estos archivos en un directorio que yo elija.
Gracias por su apoyo.
command-line
V 3 L 3 N 0
fuente
fuente
find /path/to/dir/ -name '*.c' | xargs cp -t /target/
xargs
Normalmente es mucho más rápido. Acabo de ejecutar una prueba rápida aquí para encontrar una carga de archivos c y ejecutarlosls -l
en ellos. Son 0m2.420s paraxargs
y 0m25.494s para-exec
... Claramente en este caso lacp
operación tomará la mayor parte del tiempo, por lo que probablemente no importe, pero vale la pena tenerlo en cuenta.-n`` switch to the
comando cp` para evitar sobrescribir en el caso de nombres duplicados (o escribir un script que busque duplicados antes de copiar y renombrar el objetivo según sea necesario)También hay otra forma de hacerlo que creo que se adaptará perfectamente a su propósito. Puede combinarse
find
con unwhile
bucle y ni siquiera necesita usar ningunoexec
o ningunoxargs
. Si, por ejemplo, quisiera copiar sump3s
archivo de descarga a su carpeta de música, usaría el siguiente script, que he usado muchas veces.Puede modificarlo como desee cambiando los directorios que
find
busca y coloca los archivos resultantes; si no se indica ningún directorio,find
buscará en toda la carpeta de inicio. También puede cambiarcp
amv
u otros comandos. ¡Es bastante rápido, ya que lo acabo de probar con 3945.jpg
archivos! Cópielo en un editor de texto, guárdelo y luego hágalo ejecutable ejecutandochmod +x myscript
.En este wiki Bash señalado se muestra lo útil que es combinar el
while
bucle y losread
comandos para procesar la salida delfind
comando; y la forma en que lo he hecho asegura que el script no se rompa si se encuentra con nombres de archivos con espacios u otros caracteres inesperados o especiales.Para obtener información más general sobre el
find
comando, ingrese en el terminalman find
o consulte las páginas de manual de Ubuntu en línea . Para una gran introducción al uso de find, vea también este artículo .fuente
find ~/Downloads -type f -iname '*.mp3' | while read mp3file; do cp "$mp3file" ~/Music; done
más simple?-n`` switch to the
comando cp` para evitar sobrescribir en el caso de nombres duplicados (o escribir un script que busque duplicados antes de copiar y renombrar el objetivo según sea necesario)