GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo copiar una gran cantidad de archivos en Linux

Usamos el comando cp en Linux para copiar archivos y directorios de un directorio a otro. Puede usarse simplemente para copiar algunos archivos o directorios, o puede usarse con el '-r' argumento (que significa 'recursivo ‘) para copiar un directorio y toda la estructura de árbol de directorios debajo de él.

La sintaxis a usar para comando cp es:

$ cp <file1> <file2> ... <fileN> <target_directory>
$ cp -r <directory1> <directory2> ... <directoryN> <target_directory>
$ cp file1 file2 file3 /tmp

Si se va a copiar una gran cantidad de archivos, se pueden especificar con comodines; si se nombran en un patrón secuencial (Ej. filename_1 , nombre de archivo_2 , etc.) o si hay una gran cantidad de archivos de la misma extensión (Ej. .mp4 ).

$ cp *.txt /tmp
$ cp file_* /tmp

El comando cp puede tener cualquier cantidad de argumentos, que son archivos, directorios o ambos. El último argumento es el directorio de destino donde se copiarán.

Copiando una gran cantidad de archivos:error "Lista de argumentos demasiado larga"

Mientras que teóricamente 'cp ‘ puede tener tantos argumentos como sea posible, hay un límite predefinido en el número máximo de argumentos con los que puede trabajar un solo comando. Este es un límite definido en el sistema Linux y se basa en el tamaño de pila del sistema.

Por lo tanto, si se especifica una cantidad muy alta de archivos con el comodín con 'cp ', P.ej. más de cien mil archivos, arroja un error:“Lista de argumentos demasiado larga “.

Por ejemplo, como se muestra en la imagen de abajo, la carpeta contiene 100002 archivos Por lo tanto, da el error antes mencionado cuando ejecutamos el comando copiar pasando todos los archivos con un comodín.

$ ls -l | wc -l
$ cp file_* target/

Solución:utilice el comando "Buscar" para corregir el error "Lista de argumentos demasiado larga"

Para resolver este problema, hacemos uso del comando de búsqueda , que básicamente busca archivos en directorios en función de diferentes parámetros. Ejecutamos 'buscar ‘ en el mismo directorio que los archivos que queremos copiar.

Luego hacemos uso del '-exec' parámetro de 'buscar ‘ que le permitirá ejecutar cualquier comando sobre la salida de find.

$ find . -maxdepth 1 -name "<filename_pattern>" -exec cp {} <target_directory> \;

Aquí, el primer argumento, '.' (directorio actual) es el directorio donde encontrar los archivos. El argumento '-maxdepth 1' considera solo los archivos y directorios en el directorio actual. Sin especificar esta profundidad, ‘buscar El comando buscará en todos los subdirectorios innecesariamente.

El argumento "-name" y la cadena después de eso especifica la expresión mediante la cual se pueden enumerar los archivos requeridos. Luego especificamos el 'cp ‘ comando después del argumento '-exec' . Los corchetes abiertos, '{ }' son un marcador de posición para el argumento que se utilizará desde la salida de find.

$ find . -maxdepth 1 -name "file_*" -exec cp {} target/ \;

Podemos ver que los archivos se han copiado correctamente en '/target' .

$ cd target/
$ ls | head -10
$ ls -l | wc -l

De manera similar, si hay directorios que deben copiarse junto con archivos, ejecutamos 'cp ‘ con el '-r' marca en el siguiente ejemplo.

$ find . -maxdepth 1 -name "file_*" -exec cp -r {} target/ \;

Tenga en cuenta que, en tal caso, el nombre del directorio también debe poder buscarse con el 'patrón de nombre de archivo ‘.

Lectura relacionada :Cómo mover una gran cantidad de archivos en Linux

Conclusión

En este artículo, hemos visto cómo copiar una gran cantidad de archivos de un directorio a otro en Linux y, por lo tanto, cómo solucionar el problema 'Lista de argumentos demasiado larga ‘.

Si tiene algún comentario o pregunta, ¡háganoslo saber en los comentarios a continuación!


Linux
  1. Cómo aumentar el número de límites de archivos abiertos en Linux

  2. Cómo cambiar el nombre de los archivos en Linux

  3. ¿Cómo usar el comando Rsync en Linux?

  4. ¿Cómo copio una carpeta con archivos a otra carpeta en Unix/Linux?

  5. Cómo copiar una gran cantidad de archivos rápidamente entre dos servidores

Cómo mover una gran cantidad de archivos en Linux

Cómo Gzip archivos grandes (100GB+) más rápido en Linux

Cómo copiar archivos en Linux usando el comando CP

Cómo copiar archivos y directorios en la terminal de Linux

Cómo copiar un directorio en Linux

Cómo contar el número de archivos en un directorio en Linux