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 -r
przełą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 sort
poleceniu i powiedziałbym, aby użyło piątej kolumny do sortowania.
ls -lR | grep '^-' | sort -k 5 -rn
-rn
oznacza 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
find
Polecenie 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
/ sort
nie obsługuje -h
, zamień na du -k
i sort -rn
. Pamiętaj, że rozmiar i użycie dysku to nie to samo.
du
podaje użycie dysku inne niż rozmiar pliku. W przypadku (GNU) du -h
sortowanie numeryczne nie działa ( -h
do 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
( -ls
opcja 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 -li
kilku 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, OL
aby odwrócić kolejność według długości (rozmiar pliku, o
w kolejności rosnącej, O
w 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 D
kwalifikator globbing:
print -rl -- **/*(.DOL)
.OL
zrobić? Czy to część polecenia?
ls (GNU coreutils) 8.25
i zsh 5.1.1 (x86_64-ubuntu-linux-gnu)
. Czy to działa tylko w przypadku niektórych wersji ls
i 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 find
należy zrobić:
find . -type f -exec ls -lSd {} +
To „odnajduje” wszystkie pliki w bieżącym katalogu roboczym ( .
). Dla każdego znalezionego pliku ls
uruchamiany jest proces sortowania znalezionych obiektów w kolejności wielkości. +
Terminator z -exec
przyczyn 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
sed
do cięcia produkcji
Dodanie do odpowiedzi delha i komentarza Stéphane'a Chazelasa ...
find -print0
w połączeniu z xargs -0
dodaje 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 m
in du -sm
). Inne wartości akceptowane przez du
są -k
dla kilobajtów, -g
dla gigabajtów. Używanie -h
do wyświetlania czytelnego dla człowieka nie jest możliwe, ponieważ spowoduje to przerwanie sortowania.
Oto wersja, która sed
dołącza M
megabajt:
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 d
wyś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ć
ncdu
zamiast 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
).