Dopiero zaczynamy klasę UNIX i uczymy się różnych poleceń Bash. Nasze zadanie polega na wykonywaniu różnych poleceń w katalogu, w którym znajduje się również kilka folderów.
Wiem, jak wyświetlić i policzyć wszystkie zwykłe pliki z folderu głównego, używając:
find . -type l | wc -l
Ale chciałbym wiedzieć, dokąd się udać, aby znaleźć największy plik w całym katalogu. Widziałem kilka rzeczy dotyczących du
polecenia, ale nie nauczyliśmy się tego, więc w repertuarze rzeczy, których się nauczyliśmy, zakładam, że musimy jakoś połączyć je z ls -t
poleceniem.
I wybacz mi, jeśli mój „żargon” nie jest poprawny, wciąż się do tego przyzwyczajam!
man
a następnie polecenie, które Cię interesuje. W górę pojawi się przyjemny ręczny wpis dla tego polecenia (naciśnij,q
aby wrócić do wiersza poleceń).Odpowiedzi:
Cytat z tego linku-
źródło
'%s %p\n'
się'%p\n'
i dodanie|xargs ls -lh
do końcadu -am . | sort -nr | grep '\..*\.' | head
.m
Jest wyświetlanie rozmiaru pliku w megabajtach i używanegrep
, aby pokazać linii z co najmniej dwoma punktami, pierwszy jest w./
na drodze, a drugi to rozszerzenie pliku, np.mov
.Aby znaleźć 25 najpopularniejszych plików w bieżącym katalogu i jego podkatalogach:
find . -type f -exec ls -al {} \; | sort -nr -k5 | head -n 25
Spowoduje to wyświetlenie 25 najpopularniejszych plików poprzez sortowanie na podstawie rozmiaru plików za pomocą polecenia potokowego „sort -nr -k5”.
To samo, ale z rozmiarami plików czytelnymi dla człowieka:
find . -type f -exec ls -alh {} \; | sort -hr -k5 | head -n 25
źródło
wyjścia
Jeśli chcesz tylko nazwę pliku:
Pozwala to uniknąć używania
awk
i umożliwia używanie dowolnych flagls
.Caveat . Ponieważ
xargs
próbuje uniknąć tworzenia zbyt długich wierszy poleceń, może to się nie powieść, jeśli uruchomisz go w katalogu z dużą ilością plików, ponieważls
kończy się wykonywanie więcej niż raz. Nie jest to problem nie do przezwyciężenia (możesz zebrać danehead -n 1
wyjściowe z każdegols
wywołania i uruchomićls -S
ponownie, zapętlając, aż uzyskasz pojedynczy plik), ale nieco psuje to podejście.źródło
xargs
, zaniedbałem cię +1find . -type f -print0 | xargs -0 ls -lS | head -n 1
xargs
wykonanej partii . Aby to naprawić dodać Sortowanie:find . -type f -print0 | xargs -0 ls -lS | sort -rk 5 | head -n 10
. Pracował dla mnie na OSX.Nie ma prostego polecenia, które pozwoliłoby znaleźć największe pliki / katalogi w systemie plików Linux / UNIX / BSD. Jednak połączenie następujących trzech poleceń (za pomocą potoków) pozwala łatwo znaleźć listę największych plików:
Jeśli chcesz uzyskać bardziej czytelne dane wyjściowe, spróbuj:
Gdzie,
źródło
Wyświetla rekursywnie pliki, jeśli są to zwykłe pliki, sortuje według siódmego pola (czyli rozmiaru w moim
find
wyniku; sprawdź swoje) i pokazuje tylko pierwszy plik.Pierwsza opcja
find
to ścieżka początkowa dla wyszukiwania rekurencyjnego. Typf
wyszukiwania normalnych plików. Zwróć uwagę, że jeśli spróbujesz przeanalizować to jako nazwę pliku, możesz się nie powieść, jeśli nazwa pliku zawiera spacje, znaki nowej linii lub inne znaki specjalne. Opcjesort
różnią się również w zależności od systemu operacyjnego. Używam FreeBSD.„Lepszym”, ale bardziej złożonym i cięższym rozwiązaniem byłoby
find
przeszukanie katalogów, ale może użyć gostat
do uzyskania szczegółowych informacji o pliku, a następnie użyćawk
do znalezienia największego rozmiaru. Zwróć uwagę, że wynik działaniastat
zależy również od systemu operacyjnego.źródło
+7
robić argument? Na moim komputerze sort po prostu narzeka, że nie może znaleźć pliku o nazwie+7
.sort
systemowego w swoim systemie. W tej chwili używam OS X 10.4, gdzie użycie wywodzi się z sortowania FreeBSD :sort [-cmus] [-t separator] [-o output-file] [-T tempdir] [-bdfiMnr] [+POS1 [-POS2]] [-k POS1[,POS2]] [file...]
... Zwróć uwagę na+POS [-POS2]
. Działa to również w aktualnych wersjach FreeBSD.-k
argumentu np.sort -k 7
. edycja: przez OSX 10.5 strona podręcznika sortowania wydaje się być zmieniona na wersję, którą mam.[+POS1] [-POS2]
Notacja jest tylko starszy. O ile wiem, ta notacja jest nadal obsługiwana przez współczesne GNU sort, chociaż teraz, kiedy patrzę, wydaje się, że została usunięta ze strony podręcznika sortowania po wersji 5.1. Możesz to zobaczyć na stronie podręcznika systemowego sortowania dla FreeBSD 4.11 . Wydaje mi się, że nie czytałem strony podręcznika sortowania od czasu wydania FreeBSD 5.0!+POS1
liczy parametry sortowania od zera, a-k POS1
liczy od jednego.Spowoduje to znalezienie największego pliku lub folderu w obecnym katalogu roboczym:
Aby znaleźć największy plik we wszystkich podkatalogach:
źródło
ls
. W moich testach-S
flaga wyświetli jeden plik w każdym wierszu. Poprawiłem drugie polecenie. Mam nadzieję, że teraz jest w pełni odporny. Dziękuję Ci.W Solarisie używam:
lub
ponieważ nic innego, co tu zamieszczono, nie działało. Spowoduje to znalezienie największego pliku w
$PWD
podkatalogach i.źródło
Wypróbuj następującą jedną linijkę (wyświetl 20 największych plików):
lub (rozmiary czytelne dla człowieka):
Więc te aliasy są przydatne w plikach rc :
źródło
Spróbuj wykonać następujące polecenie:
Spowoduje to wydrukowanie największej nazwy i rozmiaru pliku oraz ponad 500 MB. Możesz przenieść
if($1 > 500000)
plik, a wydrukuje największy plik w katalogu.źródło
du -aS /PATH/TO/folder | sort -rn | head -2 | tail -1
lub
du -aS /PATH/TO/folder | sort -rn | awk 'NR==2'
źródło
Ten skrypt upraszcza znajdowanie największych plików do dalszych działań. Trzymam go w katalogu ~ / bin i umieszczam ~ / bin w mojej $ PATH.
źródło
To dość prostszy sposób:
Otrzymasz to:
8445 examples.desktop
źródło
1***
na koniec? Otrzymuję błąd „nie znaleziono dopasowań” dla tego argumentu.Rozwiązanie dla systemu Linux: Na przykład chcesz zobaczyć wszystkie pliki / listę folderów w katalogu domowym (/) według rozmiaru pliku / folderu ( kolejność malejąca ).
sudo du -xm / | sort -rn | więcej
źródło
Aby wyświetlić większy plik w folderze
Rezultatem
ls -sh
jest rozmiars
ih
zrozumiały dla człowieka widok numeru rozmiaru pliku.Możesz użyć
ls -shS /pathFolder | head -n 1
. WiększyS
zls
już uporządkuje listę z większych plików do mniejszych, ale pierwszym wynikiem jest suma wszystkich plików w tym folderze. Więc jeśli chcesz tylko wyświetlić większy plik, jeden plik, musiszhead -n 2
sprawdzić „wynik w drugiej linii” lub użyć pierwszego przykładu zls sort head
.źródło
źródło