Étiquette : exec

4 juin 2018 /
1. Sauvegarder les fichiers de plus de 180 jours dans une archive compressée
find . -mtime +180 -print0 | xargs -0 tar -zcf ../backup_04-06-2018.tar.gz
ou
find . -mtime +180 -print0 | xargs -0 tar -zcf "../backup_$(date +%d-%m-%Y).tar.gz"
Explication :

  • find . -mtime +180 : trouve les fichiers modifiés il y a plus de 180 jours.
  • -print0 + xargs -0 : gère correctement les noms de fichiers avec espaces, apostrophes, caractères spéciaux (très sûr).
  • tar -zcf ../backup_…tar.gz : crée l’archive gzip directement à partir de la liste fournie par xargs (sans passer par un fichier temporaire).
2. Compter le nombre de fichiers sauvegardés
find . -mtime +180 -exec ls -1 {} + | wc -l
Explication :

  • Liste les fichiers concernés (un par ligne avec ls -1).
  • wc -l compte les lignes → nombre de fichiers.

Variante plus précise (sans ls) :

find . -mtime +180 -print | wc -l
3. Supprimer les fichiers après sauvegarde
find . -mtime +180 -exec rm {} +
Explication :

  • -exec rm {} + : supprime les fichiers trouvés de façon efficace (regroupe les arguments autant que possible).

Attention maximale : cette commande est irréversible. Toujours tester d’abord avec -ls ou -print avant de passer à -exec rm.

Séquence complète:
# 1. Création de l'archive (adapte le chemin et le nom)
find . -mtime +180 -print0 | xargs -0 tar -zcf "../backup_$(date +%d-%m-%Y).tar.gz"

# 2. Vérification du nombre de fichiers concernés
find . -mtime +180 -print | wc -l

# 3. Suppression (À EXÉCUTER UNIQUEMENT APRÈS VÉRIFICATION !)
find . -mtime +180 -exec rm {} +

 

16 février 2018 /

Effacer les fichiers de plus de 7 jours dans /tmp:

find /tmp -mtime +7 -exec rm {} \;

Effacer les fichiers de moins de 7 jours dans /tmp:

find /tmp -mtime -7 -exec rm {} \;

22 novembre 2015 /

J’ai rencontré cette petite erreur avec des répertoires contenant des millions de fichiers, qu’on vous demande de lister/supprimer, voici la solution la plus rapide.

find /chemin/repertoire -type f -name '*.log' | xargs rm -f

ou

find /chemin/repertoire -type f -name '*.log' -delete

ou encore :

find /chemin/repertoire -type f -name '*.log' -exec rm -rf {};

14 septembre 2015 /

Pour effacer tout le contenu d’un répertoire en épargnant un fichier:


cd repertoire
find . -maxdepth 1 -not -name fichier_a_conserver -exec rm -rf ‘{}’ \;

Pou effacer tout le contenu d’un dossier sauf les fichiers jpg:


cd dossier
find . -maxdepth 1 -not -name *.jpg -exec rm -rf ‘{}’ \;

9 juin 2015 /

Pour lancer une commande après l’autre.
Si vous avez trois fichiers, la ligne de commande va être exécuter trois fois.

-exec ... \; 

Sinon pour les commandes qui peuvent prendre en argument plus d’un fichier à la fois (exemple : cat, stat, ls) on utilise « {} + ».
Les fichiers trouvés par find seront chaînés ensemble comme avec la commande xargs .

-exec ... {} +