GNU/Linux >> Linux Esercitazione >  >> Linux

Come copiare un gran numero di file in Linux

Usiamo il comando cp in Linux per copiare file e directory da una directory all'altra. Può essere semplicemente utilizzato per copiare alcuni file o directory, oppure può essere utilizzato con il '-r' argomento (che sta per "ricorsivo ') per copiare una directory e l'intera struttura ad albero delle directory al di sotto di essa.

La sintassi da utilizzare per comando cp è:

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

Se è necessario copiare un numero elevato di file, è possibile specificarli con caratteri jolly; se sono nominati in uno schema sequenziale (es. nomefile_1 , nomefile_2 , ecc.) o se sono presenti un numero elevato di file con la stessa estensione (Es. .mp4 ).

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

Il comando cp può quindi avere un numero qualsiasi di argomenti, che sono file, directory o entrambi. L'ultimo argomento è la directory di destinazione in cui devono essere copiati.

Copia di un numero elevato di file:errore "Elenco argomenti troppo lungo"

Mentre teoricamente "cp ' può avere il maggior numero di argomenti possibile, esiste un limite predefinito sul numero massimo di argomenti con cui può funzionare un singolo comando. Questo è un limite definito nel sistema Linux e si basa sulla dimensione dello stack del sistema.

Pertanto, se viene specificato un numero molto elevato di file con il carattere jolly con 'cp ', Per esempio. oltre centomila file, genera un errore:"Lista di argomenti troppo lunga “.

Ad esempio, come mostrato nell'immagine seguente, la cartella contiene 100002 File. Pertanto, dà il suddetto errore quando eseguiamo il comando copy passando tutti i file con un carattere jolly.

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

Soluzione:utilizzare il comando "Trova" per correggere l'errore "Elenco argomenti troppo lungo"

Per risolvere questo problema, utilizziamo il comando trova , che fondamentalmente ricerca i file nelle directory in base a parametri diversi. Eseguiamo "trova ' nella stessa directory dei file che vogliamo copiare.

Quindi utilizziamo il '-exec' parametro di "trova ' che ti permetterà di eseguire qualsiasi comando sull'output di trova.

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

Qui, il primo argomento, '.' (directory corrente) è la directory in cui trovare i file. L'argomento '-maxdepth 1' considera solo i file e le directory nella directory corrente. Senza specificare questa profondità, "trova Il comando ' cercherà inutilmente tutte le sottodirectory.

L'argomento "-name" e la stringa successiva specifica l'espressione che utilizza i file richiesti che possono essere elencati. Quindi specifichiamo il "cp ' comando dopo l'argomento '-exec' . Le parentesi aperte, '{ }' sono un segnaposto per l'argomento che deve essere utilizzato dall'output di find.

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

Possiamo vedere che i file sono stati copiati correttamente in '/target' .

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

Allo stesso modo, se ci sono directory che devono essere copiate insieme ai file, eseguiamo "cp ' con il '-r' flag nell'esempio seguente.

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

Tieni presente che, in tal caso, il nome della directory dovrebbe essere ricercabile anche con il "modello nome file '.

Lettura correlata :Come spostare un gran numero di file in Linux

Conclusione

In questo articolo, abbiamo visto come copiare un gran numero di file da una directory all'altra in Linux e quindi come risolvere il problema "Lista di argomenti troppo lunga '.

Se hai commenti o domande, faccelo sapere nei commenti qui sotto!


Linux
  1. Come aumentare il limite del numero di file aperti in Linux

  2. Come rinominare i file in Linux

  3. Come usare il comando Rsync in Linux?

  4. Come posso copiare la cartella con i file in un'altra cartella in Unix/Linux?

  5. Come copiare rapidamente un gran numero di file tra due server

Come spostare un gran numero di file in Linux

Come Gzip file di grandi dimensioni (100 GB+) più velocemente in Linux

Come copiare file in Linux usando il comando CP

Come copiare file e directory nel terminale Linux

Come copiare la directory su Linux

Come contare il numero di file in una directory in Linux