Próbuję rekurencyjnie znaleźć największy plik w katalogu. Jeśli w tym katalogu znajduje się podkatalog, funkcja musi wejść do tego katalogu i sprawdzić, czy jest tam największy plik. Po znalezieniu największego pliku wyświetlane są dane wyjściowe z względną nazwą ścieżki oraz nazwą i rozmiarem największego pliku.
DAWNY:
dude@shell2 (~...assignment/solutions) % bash maxfile.sh ~/test
class/asn
dude.h.gch: 9481628
Oto co mam:
#!/bin/sh
clear
recursiveS() {
for d in *; do
if [ -d $d ]; then
(cd $d; echo $(pwd)/$line; du -a; recursiveS;)
fi
done
}
recursiveS
Utknąłem na chwilę. Nie mogę tego zaimplementować, potokując wiele istniejących narzędzi uniksowych. Wszelkie pomysły byłyby fajne!
bash
shell-script
recursive
użytkownik2419571
źródło
źródło
for d in */ .[^.]*/
; do ... 'Odpowiedzi:
użyj
find
(tutaj zakładając GNUfind
), aby wyprowadzić nazwy plików o rozmiarze pliku. sortować. wydrukuj największy.Zakłada się, że ścieżki do plików nie zawierają znaków nowej linii.
Używanie pętli w
bash
implementacji GNUstat
:Będzie to znacznie wolniejsze niż rozwiązanie wyszukiwania. Zakłada to również, że nazwy plików nie kończą się na znakach nowego wiersza i pomijają ukryte pliki i nie schodzą do ukrytych katalogów.
Jeśli
-
w bieżącym katalogu jest plik wywołany, zostanie wzięty pod uwagę rozmiar pliku otwartego na standardowym wejściu.Uwaga: wersje z wersji
bash
wcześniejszej niż 4.3 korzystały z dowiązań symbolicznych podczas zejścia z drzewa katalogów.źródło
tail -n 1 <(sort -n <(find . -type f -printf "%s\t%p\n"))
)To polecenie pomaga również wyświetlić zdefiniowany rozmiar.
źródło
Działa to na BSD / macOS:
Możesz także dołączyć
| head -n 3
liczbę interesujących wpisów (w tym przypadku 3).źródło
man find
iman sort
użyj brainz :-)Z
zsh
, dla największego zwykłego pliku:(oczywiście możesz zastąpić
ls -ld --
dowolną komendą. Jeśli używasz GNUls
lub kompatybilnego, zobacz także-h
opcję rozmiarów czytelnych dla człowieka ).
: tylko zwykłe pliki (nie katalogi, dowiązania symboliczne, urządzenia, fifos ...)D
: dołącz ukryte i zejdź do ukrytych katalogówOL
: odwrotnie sortowane według rozmiaru (L
ength).[1]
: tylko pierwszy mecz.Jeśli są remisy, otrzymasz dowolną z nich losowo. Jeśli chcesz pierwszy w kolejności alfabetycznej, dodaj dodatkowy
on
(o
rder byn
ame), aby posortować więzi alfabetycznie.Pamiętaj, że bierze pod uwagę rozmiar plików, a nie użycie dysku.
źródło
[1]
z[1,10]