2012-08-13 20 views
17

Si ejecuto el comando mv folder2/*.* folder, aparece el mensaje "lista de argumentos demasiado larga".Mover gran cantidad de archivos

Encontré un ejemplo de ls y rm, que trata este error, usando find folder2 -name "*.*". Pero tengo problemas para aplicarlos al mv.

+0

Esta pregunta y sus respuestas aquí en S. O. semanalmente Por favor, aprenda a buscar antes de preguntar. Buena suerte. – shellter

+0

@shellter Encuentro algunos ejemplos similares, pero como dije, todos ellos son ejemplos de 'ls' y' rm'. – DrXCheng

+1

@shellter, si hay tantos dups, encuentre uno y vote para cerrar. –

Respuesta

47
find folder2 -name '*.*' -exec mv {} folder \; 

-exec ejecuta cualquier comando {}, inserta el nombre del archivo encontrado, \; marca el final del comando exec.

+0

Gracias por la respuesta, me pregunto cuántos archivos podrían moverme. ¿Cuál es el límite de conteo de archivos para que mv funcione? – Thunder

12

Las otras find respuestas funcionan, pero son terriblemente lentas para una gran cantidad de archivos, ya que ejecutan un comando para cada archivo. Un enfoque mucho más eficiente es ya sea para utilizar + al final de find o utiliza xargs:

# Using find ... -exec + 
find folder2 -name '*.*' -exec mv --target-directory=folder '{}' + 

# Using xargs 
find folder2 -name '*.*' | xargs mv --target-directory=folder 
+0

Estoy de acuerdo con normalidad, pero si un 'mv' directo genera un error de" lista de argumentos demasiado larga ", dudo que funcione uno tan largo como' find '. –

+1

No estoy seguro de seguir. Ese es el punto del '+' al final de 'encontrar'. Si usa eso, 'find' se comporta exactamente como' find | combinación xargs' – Idelic

+0

El shell cometió un error cuando el OP intentó mover todos los archivos a la vez. Tanto 'find' como' xargs' eventualmente ejecutan el mismo comando de shell para realmente hacer el movimiento, por lo que es probable que también fallen. Es por eso que sugerí el método de uno por uno a pesar de que es más lento. –

Cuestiones relacionadas