PDA

Ver la versión completa : [Ayuda] Unix: CP con demasiados argumentos



Estopero
19/10/2010, 12:09
Hola!

Resulta que quiero copiar una cantidad obscena de archivos de un directorio a otro (algo así como 10.000 archivos) y al intentar hacer lo propio con el comando CP me dice que la lista de argumentos es demasiado larga...

Alguien me ayuda a encontrar una solución genérica a esto? :S

Muchas gracias!

Locke
19/10/2010, 12:14
Ctrl+c - Ctrl+v no funciona? xD

Estopero
19/10/2010, 12:15
Ctrl+c - Ctrl+v no funciona? xD

En modo consola parece que no le gusta XDD

Segata Sanshiro
19/10/2010, 12:20
¿No puedes usar los comodines de alguna forma?

Locke
19/10/2010, 12:23
Y con un script con un bucle? Guarda algo asi (si no me falla la memoria, que es probable) en un archivo "copiartodo.sh" en el directorio donde tengas los archivos, le das permiso de ejecucion y luego lo ejecutas con ./copiartodo "directorio de destino"

for archivo in ls
do
cp -R $archivo $1
done

JoJo_ReloadeD
19/10/2010, 12:23
Yo tengo este problema cuando quiero borrar millones de ficheros... obviamente rm dice que leches... asi que uso esto:

find * -mtime +5 -exec rm {} \;

eso busca los ficheros de mas de 5 dias de edad (lo modifico al gusto), y a lo encontrado ejecuta el rm.... para lo tuyo podria quedar asi:

find * -mtime +0 -exec cp {} destino \;

En todo caso, te recomiendo que le eches un ojo a midnight commander (paquete mc).

otto_xd
19/10/2010, 12:23
Es todo el contenido o son solo argunos archivos??

Si son solo algunos, copia poco a poco, porque algo tendran en comun xD

dr_bacterio
19/10/2010, 12:24
Hola,
prueba con:

find . -maxdepth 1 -type f -name "*.ogg" -print0 | xargs -0 -IMYFILES cp MYFILES /home/media


Lo ejecutas des de el directorio donde se encuentren los archivos, substituyes "*.ogg" por el la extensión de los archivos
o simplemente "*" y substituyes /home/media por el directorio de destino.


¡SALUDOS!

Estopero
19/10/2010, 13:13
Muchas gracias por la ayuda a todos!

Al final he usado rsync en local con rsync -av <origen> <destino> y parece que funciona bien, está copiando todo :)

He probado vuestros consejos y no he conseguido que me funcionase aún me pierdo usando tuberías y seguro que estaba haciendo algo mal pero os lo agradezco mucho.

Abrazos a todos! :)

Marcus
19/10/2010, 18:50
Hola,
prueba con:

find . -maxdepth 1 -type f -name "*.ogg" -print0 | xargs -0 -IMYFILES cp MYFILES /home/media


Lo ejecutas des de el directorio donde se encuentren los archivos, substituyes "*.ogg" por el la extensión de los archivos
o simplemente "*" y substituyes /home/media por el directorio de destino.


¡SALUDOS!

xargs es el camino a seguir en estos casos :brindis: