1 votes

Création d'un fichier tar à partir des fichiers situés dans une plage de dates spécifique

J'ai des problèmes avec la gé J'ai un dossier d'environ 20 Go qui contient environ 40.000 images. J'ai essayé d'archiver ce dossier en divisant les fichiers d'archive :

tar -cvpj 'home/public_html/images/'/ | split -d -b 100m - images.tar.bz2.

Cela fonctionne bien mais le problème est que le processus prend trop de temps et je pense que mon hébergeur tue le processus au milieu du processus d'archivage.

Je n'ai donc pas pu utiliser les fichiers archivés car lorsque j'essaie de les extraire, le message est corrompu. Lorsque j'exécute à nouveau cette commande, elle tente d'archiver à nouveau tous les fichiers et d'écraser les fichiers précédemment archivés.

J'ai décidé d'archiver les fichiers en fonction de leur date. Par exemple, chaque archive contient uniquement les fichiers téléchargés au cours d'un mois. Malheureusement, j'ai essayé plusieurs commandes mais je n'ai pas trouvé de solution.

J'ai trouvé la question : Comment ne tarifier que les fichiers d'un répertoire en fonction d'un nom de fichier spécifique ? mais j'ai besoin d'un d
Comment archiver/compresser et filtrer des fichiers en fonction de leur date ? J'ai essayé d'utiliser cPanel mais ce dossier n'a pas été pris en compte.

6voto

Hurda Points 614

Je pense que je ferais cela en utilisant find et en passant cette entrée dans tar. Pour reprendre votre exemple, supposons que vous vouliez des fichiers datant de 60 à 90 jours.

find /home/public_html/images -type f -daystart -mtime -90 -and -mtime +60 -print0 | xargs -0 tar -Ajf images_60-90.tar.bz2

Cette opération permet de répertorier tous les fichiers dont la dernière modification remonte à plus de 60 jours et à moins de 90 jours, et de les placer dans l'archive nommée images_60-90.tar.bz2 . Mon utilisation de -print0 y xargs servent principalement à se protéger des fichiers dont le nom contient des espaces, et au cas où il y aurait tellement de fichiers qu'ils dépasseraient la longueur maximale de la ligne de commande (que l'on peut trouver en exécutant la commande getconf ARG_MAX ). Je n'ai pas testé cette commande, et je ne sais pas ce qui se passe si vous utilisez l'option append lorsque le fichier n'existe pas.

Si, toutefois, vous savoir qu'il n'y a pas d'espaces dans les noms de fichiers et qu'il y aura moins de fichiers que la valeur de ARG_MAX, vous pouvez simplifier un peu votre commande.

find /home/public_html/images -type f -daystart -mtime -90 -and -mtime +60 tar -cjf images_60-90.tar.bz2

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X