Est-il possible d'utiliser ls
sous Unix pour lister la taille totale d'un sous-répertoire et tout son contenu par opposition à l'habituel 4K
qui (je suppose) n'est que le fichier de répertoire lui-même?
total 12K
drwxrwxr-x 6 *** *** 4.0K 2009-06-19 10:10 branches
drwxrwxr-x 13 *** *** 4.0K 2009-06-19 10:52 tags
drwxrwxr-x 16 *** *** 4.0K 2009-06-19 10:02 trunk
Après avoir parcouru les pages de manuel, je monte vide.
alias ducks='du -cksh * | sort -hr | head -n 15'
Réponses:
Essayez quelque chose comme:
version courte de:
Explication:
du
: D isk U sage-s
: Afficher un résumé pour chaque fichier spécifié. (Équivalent à-d 0
)-h
: Sortie "lisible par l'homme". Utilisez les suffixes unitaires: B yte, K ibibyte (KiB), M ebibyte (MiB), G ibibyte (GiB), T ebibyte (TiB) et P ebibyte (PiB). (BASE2)la source
*(D)
pour faire correspondre les fichiers cachés ( d ot) avec les fichiers normaux. Lorsque vous utilisez bash, vous pouvez utiliser* .[!.]*
pour faire correspondre les deux.du -sch * .[!.]* | sort -rh
c'est super (afficher une sortie triée) Sur mac do:brew install coreutils
puisdu -sch * .[!.]* | gsort -rh
du -sk * | sort -n
triera les dossiers par taille. Utile lorsque vous cherchez à libérer de l'espace ..la source
| tail -r
pour trier par le plus grand en premier.sort -rn
trie les choses dans l'ordre numérique inverse.sort -rn | head -n 10
n'affichera que les premiers, si cela vous intéresse.sort -rh
fonctionnera bien avecdu -cksh *
comme il trie les unités lisibles par l'homme.du -ksh | sort -rn
est le même quedu -cksh | sort -rn
. Tout commedu -ksh
c'est le même quedu -cksh
.Cela sera affiché dans un format lisible par l'homme.
la source
sort -h
ici: gnu.org/software/coreutils/manual/...~~V~~singular~~3rd Il est surtout là pour le tri103K
,102M
,1.1G
etc. Cela devrait être disponible sur un grand nombre de systèmes de nos jours, mais pas tous.du -sh * | sort -rh
(-r pour lister d'abord les plus gros dossiers)du -sh $(ls -A) | sort -h
Pour répertorier les répertoires les plus volumineux du répertoire actuel au format lisible par l'homme:
du -sh * | sort -hr
Une meilleure façon de limiter le nombre de lignes peut être
du -sh * | sort -hr | head -n10
Où vous pouvez augmenter le suffixe de l'
-n
indicateur pour limiter le nombre de lignes répertoriéesÉchantillon:
Cela rend la lecture plus pratique :)
la source
Pour l'afficher au
ls -lh
format, utilisez:Code awk expliqué:
Exemple de sortie:
la source
--color=no
sort --key=5,5h
pour trier les «unités lisibles par l'homme» de la cinquième colonnesort: stray character in field spec: invalid field specification
5,5h ''. Je déteste vraiment les macs parfois = \La commande que vous voulez est 'du -sk' du = "utilisation du disque"
L'indicateur -k vous donne la sortie en kilo-octets, plutôt que la valeur par défaut des secteurs de disque (blocs de 512 octets).
L'indicateur -s répertorie uniquement les éléments du répertoire de niveau supérieur (c'est-à-dire le répertoire actuel, par défaut, ou le répertoire spécifié sur la ligne de commande). C'est étrange que du a le comportement opposé de ls à cet égard. Par défaut, du vous donnera récursivement l'utilisation du disque de chaque sous-répertoire. En revanche, ls ne donnera que les fichiers de liste dans le répertoire spécifié. (ls -R vous donne un comportement récursif.)
la source
Mettez cette déclaration de fonction shell dans vos scripts d'initialisation shell:
Je l'ai appelé
duls
car il montre la sortie des deuxdu
etls
(dans cet ordre):Explication:
L'
paste
utilitaire crée des colonnes à partir de son entrée selon la spécification que vous lui donnez. Étant donné deux fichiers d'entrée, il les place côte à côte, avec un onglet comme séparateur.Nous lui donnons la sortie du
du -hs -- "$@" | cut -f1
premier fichier (flux d'entrée vraiment) et la sortie duls -ld -- "$@"
deuxième fichier.Dans la fonction,
"$@"
sera évalué dans la liste de tous les arguments de ligne de commande, chacun entre guillemets. Il comprendra donc les caractères globbing et les noms de chemin avec des espaces, etc.Le double moins (
--
) signale la fin des options de ligne de commande àdu
etls
. Sans cela, direduls -l
serait confusdu
et toute option pourdu
celals
n'aurait pas confonduls
(et les options qui existent dans les deux utilitaires pourraient ne pas signifier la même chose, et ce serait un joli gâchis).L'
cut
aprèsdu
coupe simplement la première colonne de ladu -hs
sortie (les tailles).J'ai décidé de mettre la
du
sortie sur la gauche, sinon j'aurais dû gérer une colonne de droite bancale (en raison de la longueur variable des noms de fichiers).La commande n'acceptera pas d'indicateurs de ligne de commande.
Cela a été testé à la fois
bash
et enksh93
. Cela ne fonctionnera pas avec/bin/sh
.la source
J'utilise toujours
du -sk
(-k
indicateur indiquant la taille du fichier en kilo-octets) à la place.la source
la source
ncdu
ncursesdu
Cet utilitaire CLI génial vous permet de trouver facilement les gros fichiers et répertoires de manière interactive.
Par exemple, depuis l'intérieur d' un arbre d' un projet bien connu, nous faisons:
Le résultat est:
Ensuite, j'entre en bas et à droite sur mon clavier pour aller dans le
/drivers
dossier, et je vois:ncdu
ne calcule la taille des fichiers récursivement qu'une seule fois au démarrage pour l'arborescence entière, il est donc efficace."Utilisation totale du disque" vs "Taille apparente" est analogue à
du
, et je l'ai expliqué à: pourquoi la sortie de `du` est-elle souvent si différente de` du -b`Page d'accueil du projet: https://dev.yorhel.nl/ncdu
Questions connexes:
Testé dans Ubuntu 16.04.
ncdu
utilisation non interactiveUne autre fonctionnalité intéressante de
ncdu
est que vous pouvez d'abord vider les tailles au format JSON, puis les réutiliser.Par exemple, pour générer le fichier exécuté:
puis l'examiner de manière interactive avec:
Ceci est très utile si vous avez affaire à un système de fichiers très volumineux et lent comme NFS.
De cette façon, vous pouvez d'abord exporter une seule fois, ce qui peut prendre des heures, puis explorer les fichiers, quitter, explorer à nouveau, etc.
Le format de sortie est juste JSON, il est donc facile de le réutiliser avec d'autres programmes, par exemple:
révèle une structure de données d'arborescence de répertoires simple:
Testé dans Ubuntu 18.04.
la source
du -sch * dans le même répertoire.
la source
C'est celui que j'aime
mise à jour : je n'ai pas aimé le précédent car il n'affichait pas les fichiers du répertoire courant, il ne listait que les répertoires.
Exemple de sortie pour
/var
sur ubuntu:sudo du -hDaxd1 /var | sort -h | tail -n10
la source
Ce sont toutes d'excellentes suggestions, mais celle que j'utilise est:
-ksh
s'assure que les fichiers et les dossiers sont répertoriés dans un format lisible par l'homme et en mégaoctets, kilo-octets, etc. Ensuite, vous les triez numériquement et inversez le tri afin qu'il place les plus gros en premier.Le seul inconvénient de cette commande est que l'ordinateur ne sait pas que Gigabyte est plus grand que Megabyte donc il ne triera que par numéros et vous trouverez souvent des listes comme celle-ci:
Faites juste attention à regarder l'unité.
Cette commande fonctionne également sur Mac (contrairement à
sort -h
par exemple).la source
-h
drapeau de ladu
commande, vous coupez cet inconvénient-h
au lieu de-n
trier.du a une autre option utile:
-S, --separate-dirs
dire à du ne pas inclure la taille des sous-répertoires - pratique à certaines occasions.Exemple 1 - affiche uniquement les tailles de fichier dans un répertoire:
Exemple 2 - montre la taille des fichiers et les sous-répertoires du répertoire:
la source
du -sm * | sort -nr
Sortie par taille
la source
regardez la
du
commande pour celala source
juste un avertissement, si vous voulez comparer les tailles de fichiers. du produit des résultats différents selon le système de fichiers, la taille du bloc, ....
Il peut arriver que la taille des fichiers soit différente, par exemple en comparant le même répertoire sur votre disque dur local et un périphérique de stockage de masse USB. J'utilise le script suivant, y compris ls pour résumer la taille du répertoire. Le résultat en octets tenant compte de tous les sous-répertoires.
la source
Pour afficher récursivement la taille des fichiers et des sous-répertoires du répertoire actuel:
Pour afficher les mêmes informations de taille mais sans imprimer leurs sous-répertoires de manière récursive (ce qui peut être une énorme liste), utilisez simplement l' option --max-depth :
la source
Pendant un certain temps, j'ai utilisé Nautilus (sur le bureau Gnome sur RHEL 6.0) pour supprimer les fichiers de mon dossier personnel au lieu d'utiliser la
rm
commande dans bash. Par conséquent, la taille totale indiquée parne correspond pas à la somme de l'utilisation du disque de chaque sous-répertoire, lorsque j'ai utilisé
Il m'a fallu un certain temps pour réaliser que Nautilus envoie les fichiers supprimés dans son dossier Corbeille, et que ce dossier n'est pas répertorié dans la
du -sh *
commande. Donc, je voulais juste partager cela, au cas où quelqu'un serait confronté au même problème.la source
Hmm, la meilleure façon est d'utiliser cette commande:
Ensuite, vous pourrez obtenir tous les dossiers de tailles sur tout votre serveur. Facile à vous aider à trouver les plus grandes tailles.
la source
Ce qui suit est facile à retenir
https://explainshell.com/explain?cmd=ls+-ltrapR
la source
Si vous voulez plus de contrôle sur les
size
répertoires sur lesquels vous souhaitez lister, vous pouvez utiliser le commutateurthreshold
(-t
) comme dans:du
-d
isku
sageh
- format lisible par l'hommet
- taille du seuilIci, nous voulons répertorier tous les répertoires dont la taille est supérieure à 1 Go.
Explication :
Les unités décrites dans le wiki sont les suivantes:
la source
J'ai rencontré un problème similaire à celui décrit par Martin Wilde, dans mon cas, en comparant le même répertoire sur deux serveurs différents après la mise en miroir avec rsync.
Au lieu d'utiliser un script, j'ai ajouté le
-b
drapeau à celuidu
qui compte la taille en octets et autant que je peux déterminer, éliminé les différences sur les deux serveurs. Vous pouvez toujours utiliser-s -h
pour obtenir une sortie compréhensible.la source
placez dans le script init comme .bashrc ... ajustez def si nécessaire.
la source
tapez "ls -ltrh / path_to_directory"
la source