Je dois trouver les fichiers les plus volumineux d'un dossier.
Comment analyser un dossier de manière récursive et trier le contenu par taille?
J'ai essayé d'utiliser ls -R -S
, mais cela répertorie également les répertoires.
J'ai aussi essayé d'utiliser find
.
command-line
find
ls
utilisateur2179293
la source
la source
Réponses:
Vous pouvez également le faire avec juste
du
. Juste pour être prudent, j'utilise cette version dedu
:L'approche:
Panne d'approche
La commande
du -ah DIR
produira une liste de tous les fichiers et répertoires d'un répertoire donnéDIR
. La-h
volonté de produire des tailles lisibles par l'homme que je préfère. Si vous ne les voulez pas, alors laissez tomber ce commutateur. J'utilise lehead -6
juste pour limiter la quantité de sortie!Assez facile à trier le plus petit au plus grand:
Inverser, le plus grand au plus petit:
Ne me montre pas le répertoire, seulement les fichiers:
Si vous voulez juste la liste du plus petit au plus grand, mais les 6 principaux fichiers choquants, vous pouvez inverser le commutateur de tri, déposer (
-r
) et utiliser à latail -6
place du fichierhead -6
.la source
grep -v "/$"
partie ne semble pas faire ce que vous attendiez, car les répertoires n'ont pas de barre oblique ajoutée. Est-ce que quelqu'un sait comment exclure les répertoires des résultats?/
texte non plus - par exemple, il/home/saml/Downloads/audible
semble que ce soit un répertoire, mais il ne comporte pas de barre oblique. Il n'y/home/saml/Downloads/
a qu'une barre oblique, mais c'est probablement parce que vous l'avez écrit avec une barre oblique lorsque vous spécifiez l'argument pour l'initialedu
.Si vous souhaitez rechercher tous les fichiers du répertoire en cours et de ses sous-répertoires et les répertorier en fonction de leur taille (sans tenir compte de leur chemin), et en supposant qu'aucun des noms de fichiers ne contient de caractères de nouvelle ligne, avec GNU
find
, procédez comme suit:Depuis
man find
un système GNU:De
man sort
:la source
Essayez la commande suivante:
Il listera récursivement les 20 plus gros fichiers du répertoire en cours.
Remarque: L’option
-h
forsort
n’est pas disponible sous OSX / BSD. Vous devez donc installer àsort
partir decoreutils
(par ex. Viabrew
) et appliquer le chemin du bac local àPATH
, par ex.Vous pouvez également utiliser:
Pour les plus grands annuaires
du
, par exemple:ou:
la source
Tous les fichiers seront récursivement et triés par taille. Il imprime toutes les tailles de fichier en ko et arrondit à la baisse pour que vous puissiez voir des fichiers de 0 ko, mais il était assez proche pour mes utilisations et fonctionne sur OSX.
find . -type f -print0 | xargs -0 ls -la | awk '{print int($5/1000) " KB\t" $9}' | sort -n -r -k1
la source
find . -type f
trouve des fichiers ... cela fonctionne de manière récursive, vous avez raison, mais il répertorie tous les fichiers qu'il trouve, pas les répertoires euxAvec
zsh
, vous trouveriez le fichier le plus volumineux (en termes de taille apparente, telle que la colonne de taille dans lals -l
sortie, pas d'utilisation du disque) avec:Pour les 6 plus grands:
Pour les trier par taille de fichier, vous pouvez utiliser
ls
l'-S
option de. Certainesls
implémentations ont également une-U
option pourls
ne pas trier la liste (comme elle est déjà triée par taillezsh
ici).la source
Solution simple pour Mac / Linux qui ignore les répertoires:
la source
L'équivalent en
BSD
ouOSX
estla source
C’est un besoin extrêmement commun pour diverses raisons (j’aime bien trouver la sauvegarde la plus récente dans un répertoire) et c’est une tâche étonnamment simple.
Je vais fournir une solution Linux qui utilise les utilitaires find, xargs, stat, tail, awk et sort.
La plupart des gens ont fourni des réponses uniques, mais je préfère la mienne car elle gère correctement les noms de fichiers et que le cas d'utilisation peut facilement être modifié (modification de stat et tri des arguments).
Je fournirai également une solution Python qui devrait vous permettre d'utiliser cette fonctionnalité même sous Windows.
Solution de ligne de commande Linux
Renvoyer récursivement la liste complète des fichiers d'un répertoire uniquement, triés par taille
Comme auparavant, mais cette fois, renvoyez le fichier le plus volumineux.
Même motif exact, mais sélectionnez maintenant le fichier le plus récent au lieu du plus gros
Explication:
Solution python
Ce script prend un peu plus de temps à expliquer, mais si vous enregistrez ce script sous forme de script, il effectuera une recherche dans le premier argument fourni sur la ligne de commande et renverra le fichier le plus volumineux de ce répertoire. Le script ne vérifie pas les erreurs, mais il devrait vous donner une idée de la façon de l'aborder en Python, ce qui vous donne un moyen agréable de résoudre ce problème indépendamment de la plate-forme.
la source
Variante de cette réponse d'une question similaire
la source
Essayez ci-dessous commande avec option de tri pour avoir des dossiers avec la taille dans l'ordre croissant
du -sh * | sort -sh
la source
Quelque chose qui fonctionne sur toutes les plates-formes sauf AIX et HP-UX est:
la source