J'essaie de trouver tous les gros fichiers sur mon serveur Centos. Pour ce faire, j'utilise:
find / -maxdepth 10 -size +100000 -ls
J'ai essayé de changer -ls
pour , -lsh
mais ce ne sont pas permis.
Comment afficher ces résultats avec des tailles lisibles par l'homme (en utilisant les suffixes k, M,…)?
file
utilitaire avecfind
.Réponses:
find
n'a pas d'options sophistiquées commels
. Si vous le souhaitezls -h
, vous devez appelerls
.Je recommande l'
-xdev
option pour éviter de se reproduire dans d'autres systèmes de fichiers, ce qui serait inutile si vous êtes préoccupé par l'espace disque.Si vous utilisez zsh comme shell, au lieu d'utiliser
find
, vous pouvez utiliser des qualificatifs glob. Limiter la taille du fichier est simple:L
suivi d'une taille; la taille peut avoir une unité optionnelle avant le nombre. Si vous ne vous souciez pas de la profondeur maximale, vous pouvez utiliser**/
pour recurse dans les sous-répertoires. Si vous vous souciez de la profondeur maximale, c'est plus lourd car les modèles de glob zsh n'ont pas de moyen d'exprimer «au plus n occurrences». Pour éviter la récursivité entre appareils, utilisez led
qualificatif glob; vous devez trouver le numéro de périphérique, que vous pouvez afficher avec lastat
commande sous Linux (stat -c %d /
pour afficher uniquement le numéro) ou avec le propre programmestat
intégré de zsh (exécutez-lezmodload zsh/stat
pour le charger).la source
La commande que vous essayez est lisible pour moi. Cependant, vous pouvez utiliser l'utilitaire de fichier avec la recherche ci-dessous.
Une autre façon de procéder consiste à utiliser la commande ci-dessous.
La commande ci-dessus vous donnera les fichiers dans la taille de fichier triée.
Si vous utilisez coreutils> 7.5 , vous pouvez exécuter la commande ci-dessous pour répertorier les fichiers par taille.
Dans ma machine, je n'avais pas l'
sort -h
option disponible.Comme vous l'aviez mentionné dans le commentaire, votre format lisible par l'homme est que le fichier doit avoir la taille en kb , mb ou gb . J'irais avec la deuxième commande que j'avais postée comme réponse. La sortie que j'ai obtenue lorsque je l'ai utilisée dans mon système est,
la source
> output
à la commande. Ensuite, vous pouvez ouvrir le fichier et afficher la sortie comme vous le souhaitez :)du -a --max-depth=10 / | sort -rn
est la fin que j'ai pu trouver. Cependant, dans ce cas, il n'affichera pas la taille en Ko, Mo ou Go.Je pense que ce que vous recherchez ressemble plus à ce qui suit.
Le
-exec
vous permet d'exécuter une commande et le{}
est remplacé par le résultat de la recherche. Enfin,+
c'est de dire que c'est la fin de la commande et qu'elle est obligatoire.la source
{}
ici. Les guillemets simples dans la commande sont pour le shell mais le shell ne verra jamais du tout lals -lah <args...>
commande - il le voit{}
, qui n'a pas besoin d'être cité. C'est cefind
qui voit lels -lah {}
et c'est cefind
qui étend le{}
, et comme l'indique le nom de l'-exec
option,find
utiliseexec*
directement un appel système sur les arguments, donc il n'y aura pas de problème avec les espaces carfind
ça ne va pas faire de division de mots sur vos noms de fichiers.-a
option tols
n'est pas nécessaire car les arguments devraient être des fichiers et non des répertoires. GNU trouve des utilisationsls -dils
pour l'-ls
option, donc pour la reproduire le plus fidèlement possiblels -dilsh
.find . -type f -exec file '{}' \;
Exécute un fichier sur chaque fichier dans ou en dessous du répertoire courant. Notez que les accolades sont placées entre guillemets simples pour les protéger de l'interprétation en tant que ponctuation de script shell. Le point-virgule est protégé de manière similaire par l'utilisation d'une barre oblique inverse, bien que des guillemets simples auraient pu être utilisés dans ce cas également.{}
d'être cité.