Chciałbym wymienić wszystkie pliki w kolejności od dużych do małych, a pliki mogą być obecne w dowolnym miejscu w określonym folderze.
man ls:-S sort by file size
Chciałbym wymienić wszystkie pliki w kolejności od dużych do małych, a pliki mogą być obecne w dowolnym miejscu w określonym folderze.
man ls:-S sort by file size
Odpowiedzi:
Po prostu użyj czegoś takiego:
ls -lS /path/to/folder/
Kapitału S .
Spowoduje to sortowanie plików według rozmiaru.
Zobacz także:
-S sort by file size
Jeśli chcesz sortować w odwrotnej kolejności, po prostu dodaj -rprzełącznik.
Aktualizacja:
Aby wykluczyć katalogi (i pod warunkiem, że żadna z nazw plików lub obiektów dowiązań symbolicznych nie zawiera znaków nowej linii):
ls -lS | grep -v '^d'
Aktualizacja 2:
Widzę teraz, jak nadal pokazuje linki symboliczne, którymi mogą być foldery. Łącza symboliczne zawsze zaczynają się na literę l, jak w łączu.
Zmień polecenie, aby filtrować według -. Powinno to pozostawiać zwykłe pliki:
ls -lS | grep '^-'
W moim systemie pokazuje to tylko zwykłe pliki.
aktualizacja 3:
Aby dodać rekurencję, pozostawiłbym sortowanie wierszy sortpoleceniu i powiedziałbym, aby użyło piątej kolumny do sortowania.
ls -lR | grep '^-' | sort -k 5 -rn
-rnoznacza Odwróć i numerycznie, aby uzyskać największe pliki na górze. Wadą tego polecenia jest to, że nie wyświetla ono pełnej ścieżki do plików.
Jeśli potrzebujesz pełnej ścieżki do plików, użyj czegoś takiego:
find . -type f -exec du -h {} + | sort -r -h
findPolecenie rekursywnie znaleźć wszystkie pliki we wszystkich katalogach podrzędnych .i rozmowy du -h(czyli użycie dysku -humanreadable ), a następnie ponownie uporządkować dane wyjściowe. Jeśli twój find/ sortnie obsługuje -h, zamień na du -ki sort -rn. Pamiętaj, że rozmiar i użycie dysku to nie to samo.
dupodaje użycie dysku inne niż rozmiar pliku. W przypadku (GNU) du -hsortowanie numeryczne nie działa ( -hdo sortowania potrzebna będzie opcja GNU). xargs oczekuje na wejściu listy słów, które mogą być cytowane, więc nie będzie działać, jeśli nazwy plików zawierają spacje lub znaki cytowane.
find . -type f -print0 | xargs -0 du -h | sort -rh. Jeśli chcesz po prostu powiedzieć, największe 30 pliki: find . -type f -print0 | xargs -0 du -h | sort -rh | head -n 30.
+ |składnię + | sort -r -h?
Możesz użyć czegoś takiego jak znajdź i sortuj.
find . -type f -ls | sort -r -n -k7
( -lsopcja nie jest standardowa, ale można ją znaleźć w wielu implementacjach find, nie tylko w GNU. W GNU find i innych wyświetla coś podobnego do ls -likilku wyjątków, na przykład pliki z listami ACL nie są oznaczone znakiem +)
Jeśli nazwy plików mogą zawierać znaki nowej linii, z GNU find i GNU sort:
find . -type f -ls -printf '\0' | sort -zk7rn | tr -d '\0'
Z zsh i GNU ls:
ls -ldU -- **/*(.OL)
Gdzie (.OL)jest kwalifikator globalny , .aby wybrać tylko zwykłe pliki, OLaby odwrócić kolejność według długości (rozmiar pliku, o w kolejności rosnącej, Ow dół).
(zauważ, że starsze wersje zsh miały problemy z rozmiarami plików przekraczającymi 2 ^ 32).
Niektóre systemy operacyjne mają ograniczenie wielkości listy argumentów przekazywanej do polecenia. W takich przypadkach potrzebujesz:
autoload -U zargs
zargs ./**/*(.OL) -- ls -ldU
Jeśli chcesz tylko listę plików, a nie szczegółowe dane wyjściowe, po prostu wykonaj:
print -rl -- **/*(.OL)
Jeśli chcesz dołączyć ukryte pliki (których nazwa zaczyna się od kropki, z wyjątkiem .i ..) i wyszukać również w ukrytych katalogach, dodaj Dkwalifikator globbing:
print -rl -- **/*(.DOL)
.OLzrobić? Czy to część polecenia?
ls (GNU coreutils) 8.25i zsh 5.1.1 (x86_64-ubuntu-linux-gnu). Czy to działa tylko w przypadku niektórych wersji lsi zsh?
Lista plików według rozmiaru rosnąco będzie:
ls -lSr
Dostępne są następujące opcje:
Powiedzenie, że „pliki mogą znajdować się w dowolnym miejscu w określonym folderze” oznacza, że chcesz rekurencyjnie schodzić ze wszystkich katalogów (folderów) w katalogu początkowym (folderze). Oto, co findnależy zrobić:
find . -type f -exec ls -lSd {} +
To „odnajduje” wszystkie pliki w bieżącym katalogu roboczym ( .). Dla każdego znalezionego pliku lsuruchamiany jest proces sortowania znalezionych obiektów w kolejności wielkości. +Terminator z -execprzyczyn wielu argumentów, które mają być przekazane w postaci listy do ls. O ile twój katalog (folder) nie zawiera bardzo dużej liczby plików, powinieneś mieć jedną listę (a tym samym jeden proces rozwidlony), prowadzący do pożądanego rezultatu.
Wyświetlanie listy plików w odwrotnej kolejności: ls -lSrh
W porządku rosnącym: ls -lSh
Jakiś czas temu coś napisałem. Możesz przekazać argument, aby określić liczbę plików do wyświetlenia lub po prostu wpisać big, w którym przypadku otrzymasz 10.
big () {
NUM_FILES=10;
if [ $1 ]; then
NUM_FILES=$1;
fi;
du | sort -nr | head -n $NUM_FILES
}
Wypróbuj te, działa dobrze dla mnie.
$ find /home/san -type f -printf '%s %p\n'| sort -nr | head -n 10
# find /root -type f -exec ls -lS {} + | head -n 10 | awk '{ print $5, $9 }'
Nie jest to jednak idealna odpowiedź, ale do pewnego stopnia działa
$ ls -lS |grep '^-' | head -n 6
seddo cięcia produkcji
Dodanie do odpowiedzi delha i komentarza Stéphane'a Chazelasa ...
find -print0w połączeniu z xargs -0dodaje obsługę spacji / spacji / whatnots.
du -h | sort -rn nie sortuje poprawnie między różnymi wielokrotnościami bajtów, np. 1,1M wyświetli się po 128 KB, co jest błędem.
sort -rh (--human-numeric-sort) zajmuje się tym, ale działa tylko w wersji GNU.
Poniższe polecenia zapewnią pożądany wynik.
Czytelny dla człowieka, na GNU's sort / Linux:
find . -type f -print0 | xargs -0 du -h | sort -rh
W jednostkach kilobajtowych na BSD / OSX / innych:
find . -type f -print0 | xargs -0 du -k | sort -rn
W przypadku BSD / OSX zobacz także https://unix.stackexchange.com/a/188375/82895 .
Jako odmianę oryginalnego pytania, jeśli chcesz zobaczyć łączny rozmiar plików w podkatalogach:
#!/bin/bash
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr
Wielkości będzie wyświetlana w megabajtach (The min du -sm). Inne wartości akceptowane przez dusą -kdla kilobajtów, -gdla gigabajtów. Używanie -hdo wyświetlania czytelnego dla człowieka nie jest możliwe, ponieważ spowoduje to przerwanie sortowania.
Oto wersja, która seddołącza Mmegabajt:
find ${1:-.} -maxdepth 1 -type d -exec du -sm {} \; | sort -nr | sed -E 's/^([0-9]+)/\1M/g'
Katalog do wyświetlenia jest ustawiony, za pomocą ${1:-.}którego użyje pierwszego argumentu wiersza poleceń, jeśli został podany, lub katalogu bieżącego, jeśli zostanie wywołany bez argumentów.
UWAGA: Może to zająć dużo czasu w przypadku dużej liczby plików. Ta opcja -type dwyświetla tylko podkatalogi i wyklucza pliki w bieżącym folderze; jeśli chcesz również zobaczyć pliki w bieżącym folderze, usuń go.
Uwaga: możesz użyć
ncduzamiast tego, który jest dostępny w większości repozytoriów linuksowych (na ubuntu / debianapt install ncdu), a także na osx (brew install ncdu).