tar : lenteur des options -u et -r

Le
kato fong
Bonjour,

Voulant archiver tous les fichiers *.jpg d'un disque dur, j'ai cru
habile de passer la commande suivante :

$ find /mnt/hd -iname "*.jpg" -exec tar rvf jpegs.tar {} ;

Tout démarre conformément à mes voeux mais au bout de dix bonnes
minutes, je commence à déchanter. En effet, j'ai l'impression que tout
se passe comme si l'archive entière, d'environ 500 Mo à ce moment là,
était lue avant le rajout de chaque nouveau fichier trouvé.

La lenteur de l'opération devient telle que plusieurs dizaines secondes
s'écoulent entre chaque archivage de fichier. Je n'ai pas cru utile de
poursuivre. Bien entendu, l'utilisation de l'option -u n'améliore pas
les temps d'archivage.

Quelqu'un a-t-il une astuce pour accélérer le processus d'archivage ou
une autre stratégie à proposer ?

D'avance merci

--
kf
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Nicolas George
Le #760518
kato fong wrote in message
Quelqu'un a-t-il une astuce pour accélérer le processus d'archivage ou
une autre stratégie à proposer ?


find -print0 | tar --null -T -

avec GNU tar.

kato fong
Le #760247

Quelqu'un a-t-il une astuce pour accélérer le processus d'archivage ou
une autre stratégie à proposer ?


find -print0 | tar --null -T -

avec GNU tar.


Oui. Moins de 5 minutes pour archiver les 12.023 fichiers *.jpg.

Merci

--
kf


Marc
Le #760246
kato fong wrote:

$ find /mnt/hd -iname "*.jpg" -exec tar rvf jpegs.tar {} ;


Quand on peut utiliser + au lieu de ; pour find -exec (et ça semble bien
être le cas ici) c'est toujours un gain de temps appréciable. Ça sera
sans doute légèrement plus lent que l'autre réponse proposée, mais plus
standard.

Matthieu Moy
Le #760245
Marc
kato fong wrote:

$ find /mnt/hd -iname "*.jpg" -exec tar rvf jpegs.tar {} ;


Quand on peut utiliser + au lieu de ; pour find -exec (et ça semble bien
être le cas ici) c'est toujours un gain de temps appréciable. Ça sera
sans doute légèrement plus lent que l'autre réponse proposée, mais plus
standard.


Attention, il y a un piège ... ;-)

Je suppose que le « find ... -exec ... + » fera la même chose que
« find ... | xargs ... », c'est à dire qu'il va construire une ligne
de commande aussi longue qu'il le peut, et au moment où cette ligne
atteint le maximum (en nombre d'argument), on l'exécute, puis on
continue.

Si la commande derrière est un truc du genre "cat", ou "perl -pi
-e ...", c'est pas grave, puisque l'exécuter en plusieurs fois ne
change pas la fonctionnalité. Mais avec tar, c'est bien différent. Le
jour où tu as N+1 fichiers, si N est le max possible, tu vas
exécutuer un gros "tar ... fichier1 ... fichierN", puis un deuxième
"tar ... fichierN+1" qui va joyeusement écraser l'archive créee par la
première commande.

En clair, ça va marcher sur des petits nombres de fichiers, et planter
_silencieusement_ sur des grands nombres :-(.

--
Matthieu


kato fong
Le #760244
Marc
kato fong wrote:

$ find /mnt/hd -iname "*.jpg" -exec tar rvf jpegs.tar {} ;
Quand on peut utiliser + au lieu de ; pour find -exec (et ça semble bien

être le cas ici) c'est toujours un gain de temps appréciable. Ça sera
sans doute légèrement plus lent que l'autre réponse proposée, mais plus
standard.


Attention, il y a un piège ... ;-)

Je suppose que le « find ... -exec ... + » fera la même chose que
« find ... | xargs ... », c'est à dire qu'il va construire une ligne
de commande aussi longue qu'il le peut, et au moment où cette ligne
atteint le maximum (en nombre d'argument), on l'exécute, puis on
continue.


oui, c'est ce que j'ai observé avec GNU find

Si la commande derrière est un truc du genre "cat", ou "perl -pi
-e ...", c'est pas grave, puisque l'exécuter en plusieurs fois ne
change pas la fonctionnalité. Mais avec tar, c'est bien différent. Le
jour où tu as N+1 fichiers, si N est le max possible, tu vas
exécutuer un gros "tar ... fichier1 ... fichierN", puis un deuxième
"tar ... fichierN+1" qui va joyeusement écraser l'archive créee par la
première commande.

En clair, ça va marcher sur des petits nombres de fichiers, et planter
_silencieusement_ sur des grands nombres :-(.



c'est pourquoi il vaut mieux utiliser "tar rvf ..." qui évite ce piège
dans lequel je suis tombé en premier en utilisant un "tar cvf ..." ;)

--
kf



Hugues
Le #760243
Ce cher kato fong
Bonjour,

Voulant archiver tous les fichiers *.jpg d'un disque dur, j'ai cru habile de
passer la commande suivante :

$ find /mnt/hd -iname "*.jpg" -exec tar rvf jpegs.tar {} ;

Tout démarre conformément à mes voeux ... mais au bout de dix bonnes minutes,
je commence à déchanter. En effet, j'ai l'impression que tout se passe comme
si l'archive entière, d'environ 500 Mo à ce moment là, était lue avant le
rajout de chaque nouveau fichier trouvé.


c'est effectivement le cas, le -exec va exécuter la commande donnée pour
*chaque* fichier trouvé..

--
Hugues - Debianiste avant tout - http://www.hiegel.fr/~hugues/Linux/

Publicité
Poster une réponse
Anonyme