J'essaie de trouver le fichier le plus volumineux d'un répertoire de manière récursive. S'il y a un sous-répertoire à l'intérieur de ce répertoire, la fonction doit aller à l'intérieur de ce répertoire et vérifier si le fichier le plus volumineux s'y trouve. Une fois que le fichier le plus volumineux est trouvé, le résultat est affiché avec le nom du chemin relatif, ainsi que le nom et la taille du fichier le plus volumineux.
EX:
dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test
class/asn
dude.h.gch: 9481628
C'est ce que j'ai
#!/bin/sh
clear
recursiveS() {
for d in *; do
if [ -d $d ]; then
(cd $d; echo $(pwd)/$line; du -a; recursiveS;)
fi
done
}
recursiveS
Je suis coincé depuis un moment maintenant. Je ne peux pas implémenter cela en mettant en pipeline plusieurs outils Unix existants. Toutes les idées seraient bien!
bash
shell-script
recursive
utilisateur2419571
la source
la source
for d in */ .[^.]*/
; faire ... `Réponses:
utilisez
find
(ici en supposant que GNUfind
) pour sortir les noms de fichiers avec la taille du fichier. Trier. imprimer le plus grand.Cela suppose que les chemins de fichiers ne contiennent pas de caractères de nouvelle ligne.
Utiliser une boucle
bash
avec la mise en oeuvre GNU destat
:Ce sera beaucoup plus lent que la solution de recherche. Cela suppose également que les noms de fichiers ne se terminent pas par des caractères de nouvelle ligne, ils ignoreront les fichiers cachés et ne descendront pas dans des répertoires cachés.
Si un fichier est appelé
-
dans le répertoire en cours, la taille du fichier ouvert sur stdin sera prise en compte.Attention, les versions
bash
antérieures à 4.3 suivaient les liens symboliques lors de la descente de l'arborescence.la source
tail -n 1 <(sort -n <(find . -type f -printf "%s\t%p\n"))
)Cette commande permet également d’énumérer la taille définie.
la source
Cela fonctionne sur BSD / macOS:
Vous pouvez également ajouter
| head -n 3
pour afficher le nombre d'entrées intéressantes (3 dans ce cas).la source
man find
etman sort
utilisez brainz :-)Avec
zsh
, pour le plus gros fichier régulier:(bien sûr, vous pouvez remplacer
ls -ld --
n'importe quelle commande. Si vous utilisez GNUls
ou compatible, voyez aussi l'-h
option pour les tailles lisibles par l'homme ).
: uniquement des fichiers normaux (pas des répertoires, des liens symboliques, des périphériques, des fifos ...)D
: inclure les cachés et descendre dans des répertoires cachésOL
: ordre inverse de la taille (L
ength).[1]
: seulement le premier match.S'il y a des liens, vous aurez n'importe lequel d'entre eux au hasard. Si vous voulez le premier dans l’ordre alphabétique, ajoutez un extra
on
(ordreo
parn
motif) pour trier les liens par ordre alphabétique.Notez qu'il prend en compte la taille des fichiers, pas l'utilisation du disque.
la source
[1]
par[1,10]