Étiquette : xargs

8 juillet 2019 /

Lorsque le nombre de fichiers dans un répertoire dépasse les 30000, cela peut constituer un problème.

Voici les étapes à suivre pour mener à bien cette tâche:
1) Recherche tous les fichiers .txt dans le répertoire courant et ses sous-répertoires, puis écrit la liste complète de leurs chemins dans le fichier temporaire /tmp/fichiers_a_archiver.
find . -name '*.txt' -print > /tmp/fichiers_a_archiver
2) Crée une archive gzip (fichiers_a_archiver.tar.gz) contenant exactement les fichiers listés dans /tmp/fichiers_a_archiver.
L’option –files-from permet à tar de ne prendre que ces fichiers (très utile pour archiver sélectivement).
tar -cvzf fichiers_a_archiver.tar.gz --files-from /tmp/fichiers_a_archiver
3) Supprime tous les fichiers .txt trouvés (avec -v pour voir ce qui est supprimé).
find . -name '*.txt' | xargs rm -v
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 {} +

 

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 {};

3 novembre 2015 /

Voici une petite commande pour débugger un serveur Apache. Elle fait un strace sur tous les processus Apache qui tournent sur la machine. Vous pourrez facilement identifier les nœuds d’étranglement avant une mise en production, ou détecter une procédure qui bloque.

Pour une distribution RPM :

ps awux | grep sbin/httpd | awk '{print"-p " $2}' | xargs strace -f

Pour une distribution Debian, (« apache » au lieu de « httpd »):

ps awux | grep sbin/apache | awk '{print"-p " $2}' | xargs strace -f

 

8 octobre 2015 /

Un petit script pour tuer un processus qui dure trop longtemps (ici php):

#!/bin/bash
/bin/ps -eo pid,etime,command|/bin/grep /usr/local/zend/bin/php|/bin/egrep '([0-9]+)([ ]+)([2-9]{1}[0-9]{1}:[0-9]{2})'|/bin/awk '{print $1}'|xargs -I{} kill {}