Ich versuche, die größte Datei in einem Verzeichnis rekursiv zu finden. Befindet sich in diesem Verzeichnis ein Unterverzeichnis, muss die Funktion in dieses Verzeichnis wechseln und prüfen, ob die größte Datei vorhanden ist. Sobald die größte Datei gefunden wurde, wird die Ausgabe mit dem relativen Pfadnamen sowie dem Namen und der Größe der größten Datei angezeigt.
EX:
dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test
class/asn
dude.h.gch: 9481628
Das habe ich:
#!/bin/sh
clear
recursiveS() {
for d in *; do
if [ -d $d ]; then
(cd $d; echo $(pwd)/$line; du -a; recursiveS;)
fi
done
}
recursiveS
Ich stecke jetzt schon eine Weile fest. Ich kann dies nicht implementieren, indem ich eine Reihe vorhandener Unix-Tools in die Pipeline schreibe. Irgendwelche Ideen wären nett!
bash
shell-script
recursive
user2419571
quelle
quelle
for d in */ .[^.]*/
; do ... `Antworten:
Verwenden Sie
find
(hier unter der Annahme von GNUfind
), um Dateinamen mit der Dateigröße auszugeben. Sortieren. drucke den größten aus.Dies setzt voraus, dass die Dateipfade keine Zeilenumbrüche enthalten.
Verwenden einer Schleife in
bash
der GNU-Implementierung vonstat
:Dies ist erheblich langsamer als die Find-Lösung. Das setzt auch voraus, dass Dateinamen nicht mit Zeilenumbrüchen enden und versteckte Dateien überspringen und nicht in versteckte Verzeichnisse absteigen.
Wenn sich
-
im aktuellen Verzeichnis eine Datei mit dem Namen befindet , wird die Größe der in stdin geöffneten Datei berücksichtigt.Beachten Sie, dass Versionen
bash
vor 4.3 beim Abstieg in den Verzeichnisbaum symbolischen Links gefolgt sind.quelle
tail -n 1 <(sort -n <(find . -type f -printf "%s\t%p\n"))
)Mit diesem Befehl können Sie auch die definierte Größe auflisten.
quelle
Dies funktioniert unter BSD / macOS:
Sie können auch
| head -n 3
an die Anzahl der interessanten Einträge anhängen (in diesem Fall 3).quelle
man find
undman sort
, benutze brainz :-)Mit
zsh
, für die größte reguläre Datei:(Natürlich können Sie sie durch einen
ls -ld --
beliebigen Befehl ersetzen . Wenn Sie GNUls
oder ein kompatibles Gerät verwenden, lesen Sie auch die-h
Option für vom Menschen lesbare Größen. ).
: nur normale Dateien (keine Verzeichnisse, Symlinks, Geräte, Fifos ...)D
: schließen Sie versteckte ein und steigen Sie in versteckte dirs abOL
: In umgekehrter Reihenfolge nach Größe (L
Länge).[1]
: nur das erste Spiel.Wenn es Unentschieden gibt, bekommst du eines nach dem Zufallsprinzip. Wenn Sie die erste alphabetisch sortieren möchten, fügen Sie eine weitere hinzu
on
(o
rder byn
ame), um die Verbindungen alphabetisch zu sortieren.Beachten Sie, dass die Dateigröße und nicht die Festplattennutzung berücksichtigt wird.
quelle
[1]
durch[1,10]