Je cherche à lister l'intégralité du contenu d'un répertoire, y compris le contenu des sous-dossiers, mais trié par taille de fichier. Jusqu'à présent, j'ai réussi à lister et à trier tout en étant récursif ls -lhSR
( h
c'est bien d'avoir mais certainement pas essentiel pour moi, tant que je peux obtenir des tailles de fichier). Je néglige probablement quelque chose d'évident ou demande l'impossible, mais tout conseil ici serait grandement apprécié.
9
Puisque vous n'avez pas spécifié de shell particulier, voici une alternative en utilisant les qualificatifs glob de zsh avec
pour la récursivité. Alors par exemple:
liste récursivement les fichiers simples:
la liste récursive des fichiers simples, o rdered par au froissement L ONGUEUR (taille -à- dire):
liste récursive fichiers simples, O rdered par de la taille de rainage:
lister récursivement les fichiers ordinaires, classés par taille décroissante, et sélectionner les 3 premiers résultats:
Si vous souhaitez également les tailles de fichier, vous pouvez utiliser
la source
Avec le
globstar
jeu d'options shell, vous pouvez utiliser la globalisation du shell:Si vous essayez cela avec trop de fichiers, vous obtiendrez une erreur «Liste d'arguments trop longue». Pour contourner cela, vous pouvez utiliser
printf
etxargs
:Je viens de réaliser que cela affiche également les répertoires (avec une taille de 4096 octets) - si vous ne le souhaitez pas, utilisez-le à la place:
Exemple d'exécution
la source
dotglob
option shell, voir ma réponse mise à jour.printf "%s\0" **/* | xargs -0 sh -c 'for f; do [ -d "$f" ] || stat -c "%s %n" "$f"; done' sh | sort -n
ls -lhSd **/*
si cela ne vous dérange pas d'avoir les répertoires dans la liste. Ou si aucun de vos noms de répertoire ne.
s'y trouve, et que tous les fichiers que vous voulez faire , vous pouvezll -hS **/*.*
, ou similaire.Si vous n'avez pas zsh, vous pouvez toujours utiliser
du
+sort
:Tailles lisibles par l'homme, y compris les tailles cumulatives des répertoires:
Seuls les fichiers (en utilisant
find
):Dans les deux cas, j'ai choisi d'utiliser des lignes terminées par null (
-0
,-z
,-print0
options), pour être sûr contre tous les noms de fichiers valides.la source
Pour une utilisation interactive rapide sur des arborescences de répertoires qui ne sont pas trop énormes,
shopt -s globstar
c'est vraiment sympa. Un glob ne peut pas filtrer les répertoires en fonction du type, mais si vous l'utilisez avecls -d
alors ills
affichera simplement le nom du répertoire, au lieu du contenu.En supposant que votre
ll
alias comprend-lh
:vous donnera une sortie comme celle-ci (à partir de mon répertoire code-golf), mais avec des couleurs en surbrillance (il est donc plus facile de voir les répertoires). Notez que le tri par taille de fichier s'est produit dans les sous-répertoires.
Vous pouvez filtrer les répertoires en passant par
grep -v '^d'
Vous pouvez parfois utiliser un glob qui correspond uniquement aux fichiers et non aux répertoires, si vos noms de fichiers ont un modèle. par exemple
ll -rSd **/*.jpg
, ou même**/*.*
fonctionne si aucun de vos noms de répertoire ne.
s'y trouve, et tous les fichiers que vous voulez faire .(Pour les personnes ayant un arrière-plan DOS: il n'y a rien de magique
*.*
sur Unix. Il correspond à n'importe quelle entrée de répertoire qui contient un point littéral. Mais à part les exécutables et parfois les fichiers texte, il est courant de donner des extensions aux noms de fichiers.)@dessert souligne que vous en auriez besoin
shopt -s dotglob
pour correspondre à tous les fichiers.Avec GNU
find
S'il n'y a pas trop de fichiers pour tenir sur une seule
ls
ligne de commande,find -exec ls {} +
les mettre tous sur la ligne de commande où lesls
trier.Utiliser
-not -type d
au lieu d'-type f
éviter d'ignorer les liens symboliques, les canaux nommés, les sockets, les fichiers de périphérique et tout ce que vous avez dans vos répertoires.Avec
du
:Désormais, les noms de répertoires sont triés dans la liste avec la somme totale de tout leur contenu, mais les fichiers individuels sont toujours inclus.
sort -h
, aka--human-numeric-sort
, trie les nombres avec des suffixes de taille comme lesdu -h
impressions. Il est parfait pour une utilisation avecdu
.J'utilise souvent
du -sch * | sort -h
, ou*/
pour obtenir uniquement des répertoires.du -sch **/* | sort -h
vous donnerait la sortie ci-dessus, si vous oubliez que celadu
a une-a
option.(J'ai seulement pris le temps de le chercher parce que je poste une réponse. Pour une utilisation interactive, je l'aurais probablement utilisé
du -sch **/*
.la source