Copier un unique (gros) fichier d’une source vers une destination donnée n’est pas une tâche pour laquelle les systèmes sont toujours optimisés.


Selon la philosophie UNIX, un programme doit accomplir une unique tâche précise et l’accomplir du mieux possible. C’est ce qui a donné naissance à gfast-copy et à fast-copy . Ces programmes font une chose banale mais le font bien.






J’ai développé ces deux programmes car je copie souvent de gros fichiers (vidéos, images ISO, grosses archives, etc.) de «droite à gauche» et de «gauche à droite». Et je trouvais que les systèmes d’exploitation copiaient trop lentement, parce qu’ils faisaient parallèlement autre chose, alors j’ai décidé de déléguer cette tâche à un binaire.


J’ai lu dans les manuels GNU qu’un programme qui dispose d’une interface graphique doit pouvoir accomplir la même tâche dans un (pseudo) terminal, alors j’ai écrit deux petits programmes en langage C : gfast-copy (Graphical FastCopy) et fast-copy (FastCopy).


gfast-copy (Graphical Fast Copy).

gfast-copy dispose d’une interface graphique simple:




Tout en haut, se trouve une barre de menu. Puis, alignés verticalement, viennent :

* un bouton étiqueté Source avec une icône qui vous permet de choisir le fichier à copier ;
* à côté, se trouve un bouton interrupteur affichant une simple icône permettant d’effacer le fichier source ou pas après la copie ;
* un bouton étiqueté Destination avec une icône vous permettant de choisir le l’emplacement et le nom du fichier de sortie (vous pouvez écraser un fichier).
* à côté se trouve un bouton permettant de lancer la copie ;
* et, en bas, une barre de progression affichant la progression rapide de la copie.

fast-copy (Fast Copy)
fast-copy est un outil en ligne de commande permettant de faire la même chose que gfast-copy mais depuis un terminal et, du coup, plus rapidement.



Ce programme permet aussi:

+ d’écraser la destination ;
+ d’effacer le fichier source après la copie ;
+ d’utiliser les appels système au lieu des flux (comportement par défaut).


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
$ fast-copy -h
fast-copy - a fast chunk file copy program.
 
Usage : fast-copy -r input-file -w output-file [-o] [-s] [-e] [-h]
	-r Read from file (required).
	-w Write to file  (required).
	-o Overwrite destination file (optional).
	-e Erase source file (optional).
	-s Use syscalls instead of streams (optional only UNIX).
	-h Print this help message.
 
- Copyright (©) 2017 Brüggemann Eddie <mrcyberfighter@gmail.com> GPLv3.


Algorithme de copie.

1. Le programme cherche d’abord la taille optimale de tampon*:
- soit en regardant si la constante `BUFSIZ` est définie et si elle est assez grande,
- sinon, la taille du tampon est mise à ``8192`` octets,
- si le programme utilise les appels système, il va regarder la taille optimale du tampon dans le système de fichiers ;
2. le programme définit un tampon de la taille optimale ;
3. le programme va copier dans une boucle très rapide la source vers la destination affichant une barre de progression ;
4. une fois la copie effectuée avec succès le programme va mettre à jour le système de fichiers ;
5. si vous le désirez le programme va supprimer le fichier source.

Compatibilité et portages

Les programmes ne requièrent que GTK+ en version supérieure ou égale à 3.14 (fast-copy et ne font qu’un petit usage de GLib et de Gio).

Les programmes existent pour plusieurs systèmes d’exploitation :

GNU/Linux

+ un paquetage *.deb ;
+ un paquetage *.rpm ;
+ un tarball basé sur les autotools.


Windows

+ un fichier *.exe auto‐extractible ne comprenant que gfast-copy;
+ le tarball permet de compiler avec MSYS2 et Cygwin (les dernières versions en date d’aujourd’hui).


macOS (Sierra 10.12)

Le tarball permet de compiler les programmes et vous crée une icône dans le dossier /Applications.


Note : Vous pourrez télécharger GTK 3 grâce à brew et suivre les instructions d’installation.

Notes de l’auteur

N’utilisez ces deux programmes que pour copier de gros fichiers. Pour les autres, votre système d’exploitation s’en occupe très bien.


Si vous préférez la rapidité de votre système d’exploitation alors n’utilisez pas ces programmes.

Pourquoi ces programmes ne permettent pas de copier plusieurs fichiers à la fois (surtout fast-copy)  ?
Car il existe des outils pour cela et le récursivité des chemins de fichiers de destination n’est pas une chose facile.

Car, comme je l’ai dit, je les ai développés à des fins personnelles mais je désire les partager.


Note : J’ai sûrement péché d’avoir mis une option pour chaque chemin de fichier, mais regardez la notice, vous trouverez un exemple de «wrapper» de fast-copy très pratique.

Performances
Cela dépend de plusieurs facteurs : le système d’exploitation sur lequel est utilisé le programme, la charge de la machine et, bien sûr, la nature des sources et cibles de l’opération de copie :

* disque dur interne vers un disque dur interne ;
* disque dur interne vers un disque dur externe ;
* disque dur externe vers un disque dur interne.




+ Télécharger le paquetage Debian de gfast-copy
+ Télécharger le paquetage RPM de gfast-copy
+ Télécharger la version Windows de gfast-copy
+ Télécharger l’archive tar de gfast-copy
+ README de gfast-copy.
+ GitHub de gfast-copy