Il existe plusieurs possibilités pour effectuer une copie de fichiers dans Linux.
Approche 1 : utiliser la commande cp
Syntaxe :cp source destination
La commande cp s'avère en général très utile, mais il arrive qu'elle ralentisse le processus de copie de fichiers. Il existe ainsi d'autres commandes qui permettent de faire une copie plus rapide et plus sure.
Approche 2 : utiliser la commande rsync
Elle permet de faire une copie entre deux emplacements et peut également servir à faire une copie sur un serveur distant.
Syntaxe :rsync -a source destination (si la source est un répertoire, alors il faut ajouter un slash à la fin du nom du répertoire rsync -a source/ destination)
Pour voir la progression en cas de copie de gros fichiers, il faut utiliser les options suivantes :
rsync --info=progress2 -auvz source destination
- a : archive les fichiers et les répertoires pendant la synchronisation
- u : ne pas copier les fichiers sources si la destination comprend déjà des fichiers plus récents
- v : activation de la sortie en mode verbeux
- z : comprimer les données durant le transfert
L'option --dry-run (ou -n) permet d'activer une simulation de la copie.
Note : la commande rsync n'est généralement pas plus rapide que la commande cp. Mais elle permet de synchroniser que les fichiers qui ont été modifiés ou qui sont nouveaux, ce qui permet d'avoir une meilleure vitesse lors d'une synchronisation de fichiers.
Pour installer la commande rsync si elle n'est pas installée :
Debian / Ubuntu :apt-get install rsync
CentOS / RHEL :yum install rsync
SUSE :zypper in rsync
Approche 3 : utiliser la commande tar
Pour copier des fichiers à l'aide de la commande tar :cd source; tar cf - . | (cd destination && tar xvf -)
Si vous voulez suivre la progression durant la copie, il est possible d'utiliser la commande pv en plus :
cd source; tar cf - . | pv | (cd destination && tar xvf -)
La commande tar est parfois plus rapide que la commande cp. La commande cp effectue en boucle les opérations ouverture - lecture - fermeture - ouverture - écriture - fermeture, alors que la commande tar effectue la lecture et l'écriture dans des processus séparés et utilise également plusieurs threads pour lire et écrire et peut ainsi traiter plusieurs fichiers à la fois.
Enfin, pour effectuer une copie de fichiers entre deux serveurs, il existe plusieurs possibilités.
Méthode 1 : utiliser la commande scp
Local vers serveur distant :scp soureLocal username@host:destinationDistante
Serveur distant vers local :scp username@host:sourceDistante destinationLocale
Entre deux serveurs distant : scp username@host:sourceDistante sername@host:destinationDistante
Quelques options utiles de la commande scp :
- -P : définit le port ssh de l'hôte distant
- -p : active la préservation de la date / heure de modification des fichiers
- -q : permet de supprimer l'indication de progression et l'affichage des messages autres qu'erreur
- -C : force scp à compresser les données lors de l'envoi à la machine distante
- -r : indique à scp d'effectuer une copie récursive
- -i : utilise une clé cryptographique pour effectuer l'authentification en remplacement du compte / mot de passe
Méthode 2 : utiliser la commande rsync
rsync -a source username@host:destinationDistante
Quelques options utiles :
- -h : affiche les tailles / nombre d'une façon lisible par un humain
- -z : active la compression des fichiers au moment du transfert
- -P : combinaison des options --progress (qui donne un suivi de la progression) et de --partial (qui permet une reprise en cas d'interruption)
- --delete : permet une synchronisation complète. Supprime les fichiers côté distant s'ils n'existent plus dans la source (attention, faire une simulation de copie avec l'option --dry-run avant pour éviter la perte de données)
- --exclude : permet d'exclure des fichiers / répertoires correspondants à un pattern
- --include : permet de surcharger le pattern d'exclusion pour inclure des fichiers qui serait exclus
- -e : spécifie le protocole à utiliser (Ex : -e ssh)
- --max-size : définit la taille maximale des fichiers à transférer (Ex : --max-size='200k')
- --remove-source-files : supprime les fichiers source en cas de succès du transfert
- --dry-run : simule le transfert
Ex : transfert rsync avec le protocol ssh et un port autre que le port par défaut
rsync -a -e 'ssh -p <port>' /path/to/source/ username@host:/path/to/destination