GNU/Linux >> Tutoriels Linux >  >> Linux

Comment copier un grand nombre de fichiers sous Linux

Nous utilisons la commande cp sous Linux pour copier des fichiers et des répertoires d'un répertoire à un autre. Il peut être simplement utilisé pour copier quelques fichiers ou répertoires, ou il peut être utilisé avec le '-r' argument (qui signifie ‘récursif ') pour copier un répertoire et toute l'arborescence de répertoires en dessous.

La syntaxe à utiliser pour la commande cp est :

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

Si un grand nombre de fichiers doivent être copiés, ils peuvent être spécifiés avec des caractères génériques; s'ils sont nommés dans un modèle séquentiel (par exemple, filename_1 , nom_fichier_2 , etc.) ou s'il y a un grand nombre de fichiers de la même extension (Ex. .mp4 ).

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

La commande cp peut donc avoir n'importe quel nombre d'arguments, qui sont soit des fichiers, soit des répertoires, soit les deux. Le dernier argument est le répertoire cible où ils doivent être copiés.

Copie d'un grand nombre de fichiers :erreur "Liste d'arguments trop longue"

Alors que théoriquement 'cp ' peut avoir autant d'arguments que possible, il existe une limite prédéfinie sur le nombre maximum d'arguments avec lesquels une seule commande peut fonctionner. Il s'agit d'une limite définie dans le système Linux et basée sur la taille de la pile du système.

Ainsi, si un très grand nombre de fichiers sont spécifiés avec le caractère générique avec 'cp ', Par exemple. plus d'une centaine de milliers de fichiers, il génère une erreur :"Liste d'arguments trop longue ".

Par exemple, comme le montre l'image ci-dessous, le dossier contient 100002 des dossiers. Ainsi, cela donne l'erreur susmentionnée lorsque nous exécutons la commande de copie en passant tous les fichiers avec un caractère générique.

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

Solution :utilisez la commande "Rechercher" pour corriger l'erreur "Liste d'arguments trop longue"

Pour résoudre ce problème, nous utilisons la commande de recherche , qui recherche essentiellement des fichiers dans des répertoires en fonction de différents paramètres. Nous exécutons 'trouver ‘ dans le même répertoire que les fichiers que nous voulons copier.

Ensuite, nous utilisons le '-exec' paramètre de 'trouver ' qui vous permettra d'exécuter n'importe quelle commande sur la sortie de find.

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

Ici, le premier argument, '.' (répertoire courant) est le répertoire où trouver les fichiers. L'argument '-maxdepth 1' ne considère que les fichiers et répertoires du répertoire courant. Sans préciser cette profondeur, ‘trouver ' la commande parcourra inutilement tous les sous-répertoires.

L'argument "-name" et la chaîne qui suit spécifie l'expression à l'aide de laquelle les fichiers requis peuvent être répertoriés. Ensuite, nous spécifions le 'cp ‘ commande après argument '-exec' . Les parenthèses ouvertes, '{ }' sont un espace réservé pour l'argument qui doit être utilisé à partir de la sortie de find.

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

Nous pouvons voir que les fichiers ont été copiés avec succès dans '/target' .

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

De même, s'il y a des répertoires qui doivent être copiés avec des fichiers, nous exécutons 'cp ‘ avec le '-r' drapeau dans l'exemple ci-dessous.

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

Notez que, dans un tel cas, le nom du répertoire doit également pouvoir être recherché avec le "modèle de nom de fichier ‘.

Lire connexe :Comment déplacer un grand nombre de fichiers sous Linux

Conclusion

Dans cet article, nous avons vu comment copier un grand nombre de fichiers d'un répertoire à un autre sous Linux et donc comment contourner le problème 'Liste d'arguments trop longue ‘.

Si vous avez des commentaires ou des questions, faites-le nous savoir dans les commentaires ci-dessous !


Linux
  1. Comment augmenter la limite du nombre de fichiers ouverts sous Linux

  2. Comment renommer des fichiers sous Linux

  3. Comment utiliser la commande Rsync sous Linux ?

  4. Comment copier un dossier contenant des fichiers dans un autre dossier sous Unix/Linux ?

  5. Comment copier rapidement un grand nombre de fichiers entre deux serveurs

Comment déplacer un grand nombre de fichiers sous Linux

Comment compresser des fichiers volumineux (100 Go +) plus rapidement sous Linux

Comment copier des fichiers sous Linux à l'aide de la commande CP

Comment copier des fichiers et des répertoires dans un terminal Linux

Comment copier un répertoire sous Linux

Comment compter le nombre de fichiers dans un répertoire sous Linux