2011-05-05 8 views
9

Estoy usando AIX.lista de argumentos Unix cp demasiado larga

Cuando intento copiar todos los archivos de una carpeta a otra carpeta con el siguiente comando:

cp ./00012524/*.PDF ./dummy01

La cáscara se queja:

ksh: /usr/bin/cp: 0403-027 The parameter list is too long.

Cómo tratar con él ? Mi carpeta contiene 8xxxx archivos, ¿cómo puedo copiarlos muy rápido? cada archivo tiene un tamaño de 4x kb a 1xx kb.

Respuesta

10

Uso find mando en * nix:

find ./00012524 -type f -name "*.PDF" -exec cp {} ./dummy01/ \; -print 
+2

este trabajo, pero es bastante lento tal vez? – lamwaiman1988

+1

En el caso general, también agregaría un "tipo d". Los directorios que coinciden con */PDF deben ser poco comunes, pero para una copia más general, evitará las copias múltiples resultantes de copiar primero el directorio principal (o fallar sin el distintivo -r) y luego los secundarios. – FGM

+0

Gracias, ese es un buen punto (editado) – anubhava

0

usted debería ser capaz de utilizar un bucle, por ejemplo,

for f in $(ls ./00012524/*.pdf) 
do 
    cp $f ./dummy01 
done 

No tengo manera de probar esto, pero debería funcionar en teoría.

+0

El comando ls probablemente (leer "casi con seguridad") obtendrá el mismo error. El argumento demasiado largo es un error estándar de las bibliotecas C en un sistema tipo Unix (man sysconf para obtener más información al respecto). Los mejores appproaches son encontrar ... | cpio -pvumd ... o usando xargs o tar c ... | alquitrán x etc. NINGUNO de ellos necesitará una cápsula expandida que sea la causa de su problema. Esto es realmente más apropiado para SeverFault o SuperUser que para SO. –

0
$ (cd 00012524; ls | grep '\.PDF$' | xargs -I{} cp {} ../dummy01/) 
0

La bandera -t a cp es útil aquí:

find ./00012524 -name \*.PDF -print | xargs cp -t ./dummy01

0

El mejor sistema para copiar gran número de archivos de un directorio a otro.

buscar/ruta/a/fuente/-name "*" -exec cp -ruf "{}"/ruta/a/destino/\;

Esto me ayudó mucho.

3

El comando cp tiene una limitación de archivos que puede copiar simultáneamente.

Una posibilidad puede copiarlos usando varias veces las bases de comando cp en sus patrones de archivos, como:

cp ./00012524/A*.PDF ./dummy01 
cp ./00012524/B*.PDF ./dummy01 
cp ./00012524/C*.PDF ./dummy01 
... 
cp ./00012524/*.PDF ./dummy01 

También puede copiar a través encuentran comando:

find ./00012524 -name "*.PDF" -exec cp {} ./dummy01/ \; 
+0

Obtengo 'omitiendo directorio './00012524'' con el comando find. – pir

Cuestiones relacionadas