web-dev-qa-db-fra.com

Puis-je trouver tous les fichiers avec l'extension .log et la commande par taille de fichier?

J'utilise Centos 6.8

J'aimerais savoir si je peux trouver tous les fichiers avec l'extension et la commande .log par taille de fichier et afficher la taille du fichier à côté du nom de fichier?

J'utilise actuellement cette commande pour trouver tous les fichiers avec l'extension .log:

find .  -name \*.log
8
bigmike7801

Cela semble fonctionner pour moi:

find .  -name \*.log -ls | sort -r -n -k7
8
bigmike7801

Voici deux options; une bash-centrique et un juste pour le plaisir.


( shopt -s globstar dotglob; stat --format "%s %n" -- **/*.log | sort -rn )

Cette:

  • fonctionne dans une sous-coquille, de sorte que les instructions shopt n'affectent pas la coque actuelle/courante.
  • définit les options Globstar et Dotglob Options Shell ; GlobStar permet d'utiliser le ** Syntaxe pour correspondre aux fichiers des sous-répertoires; Dotglob permet au globe de la coque de correspondre aux répertoires commençant par un .
  • stat est la façon dont nous recueillons les tailles de fichiers avec leurs noms; Il est installé par défaut sur les systèmes CENTOS - il n'est pas spécifié POSIX.
  • le vrai travail ici est fait par le Globstar **/*.log, qui rassemble des noms de fichiers correspondants (* .log) dans le répertoire actuel et des sous-répertoires.
  • nous trions ensuite numériquement les tailles et les noms de fichiers pour obtenir d'abord les plus gros fichiers (utilisez -n Sans le r pour les trier dans l'ordre de taille ascendante).

Une autre option centrée sur bash, mais celle qui exerce également un drapeau ls pour trier ses arguments par taille:

shopt -s globstar dotglob
ls -lS **/*.log

# or, in reverse:

ls -lrS **/*.log

Pour exercer votre système et votre patience, vous pouvez rechercher des fichiers d'une taille spécifique dans un certain ordre:

for((i=9223372036854775807;i>=0;i--)); do find . -name \*.log -size ${i}c -exec stat --format "%s %n" {} + ; done

Ceci exécute 9 223 372 036 854 775 807 (sur 9 Quintillion ) find commandes, recherchant des fichiers * .log de toutes les formes possibles, appelez à nouveau stat pour afficher uniquement les tailles et les noms de fichiers . Si plusieurs fichiers sont multiples de la même taille, j'ai inclus Rechercher's {} + Syntaxe pour réussir autant de noms de fichiers sur stat comme cela correspondra dans l'environnement. Vous devrez peut-être régler la plage de boucle for basée sur la taille entière de votre coquille ou si vous savez à quel point le fichier journal le plus important pourrait être important. Cette "option" a le "avantage" de pouvoir être conforme à POSIX si vous remplacez l'appel stat appel avec un simple ls.

2
Jeff Schaller