Próbuję znaleźć wszystkie duże pliki na moim serwerze Centos. Aby to zrobić, używam:
find / -maxdepth 10 -size +100000 -ls
Próbowałem zmienić -ls
na, -lsh
ale nie jest to dozwolone.
Jak wyświetlić te wyniki w rozmiarach czytelnych dla ludzi (z przyrostkami k, M,…)?
file
narzędzie zfind
.Odpowiedzi:
find
nie ma wyrafinowanych opcji takich jakls
. Jeśli chceszls -h
, musisz zadzwonićls
.Polecam
-xdev
opcję unikania rekurencji w innych systemach plików, co byłoby bezużyteczne, jeśli martwisz się o miejsce na dysku.Jeśli używasz zsh jako powłoki
find
, możesz zamiast używać globalnych kwalifikatorów. Ograniczenie rozmiaru pliku jest proste:L
po nim następuje rozmiar; rozmiar może mieć opcjonalną jednostkę przed liczbą. Jeśli nie zależy ci na maksymalnej głębokości, możesz użyć**/
do ponownego przechodzenia do podkatalogów. Jeśli zależy Ci na maksymalnej głębokości, jest to bardziej kłopotliwe, ponieważ wzorce globu zsh nie mają możliwości wyrażenia „co najwyżej n wystąpień”. Aby uniknąć rekurencji na różnych urządzeniach, użyjd
kwalifikatora glob; musisz znaleźć numer urządzenia, który możesz wyświetlić za pomocąstat
polecenia pod Linuksem (stat -c %d /
aby wyświetlić tylko numer) lub zstat
wbudowanym programem zsh (uruchom,zmodload zsh/stat
aby go załadować).źródło
Polecenie, które próbujesz, jest dla mnie czytelne. Możesz jednak skorzystać z narzędzia do zarządzania plikami znajdującego się poniżej.
Innym sposobem na to jest użycie poniższego polecenia.
Powyższe polecenie da ci pliki w posortowanym rozmiarze.
Jeśli używasz coreutils> 7.5 , możesz wydać poniższe polecenie, aby wyświetlić listę plików według rozmiarów.
Na moim komputerze nie miałem
sort -h
dostępnej opcji.Jak wspomniałeś w komentarzu, format czytelny dla człowieka to rozmiar pliku w kb , mb lub gb . Wybrałbym drugie polecenie, które opublikowałem jako odpowiedź. Dane wyjściowe, które otrzymałem, gdy użyłem go w moim systemie, to:
źródło
> output
do polecenia. Następnie możesz otworzyć plik i wyświetlić dane wyjściowe wedługdu -a --max-depth=10 / | sort -rn
jest blisko, z którym mógłbym wymyślić. Jednak w tym przypadku rozmiar nie będzie wyświetlany w KB, MB lub GB.Myślę, że to, czego szukasz, jest bardziej podobne do następującego.
-exec
Pozwala wykonać polecenie i{}
jest podstawiony w wyniku znaleziska. Na koniec+
należy powiedzieć, że jest to koniec polecenia i jest on wymagany.źródło
{}
. Pojedyncze cudzysłowy w poleceniu dotyczą powłoki, ale powłoka nigdy nie zobaczyls -lah <args...>
polecenia - widzi{}
, co nie musi być cytowane. To,find
co widzils -lah {}
i to,find
co rozszerza{}
, i jak sugeruje nazwa-exec
opcji,find
używaexec*
bezpośrednio wywołania systemowego dla argumentów, więc nie będzie żadnych problemów ze spacjami, ponieważfind
nie będzie dzielił słów na twoich nazwach plików.-a
Opcjals
jest zbędne, ponieważ oczekuje się, że argumenty za pliki i katalogi nie. GNU znajduje zastosowanials -dils
dla tej-ls
opcji, więc replikuje to jak najściślejls -dilsh
.find . -type f -exec file '{}' \;
Uruchamia plik na każdym pliku w bieżącym katalogu lub poniżej niego. Zauważ, że nawiasy klamrowe są ujęte w znaki pojedynczego cudzysłowu, aby chronić je przed interpretacją jako interpunkcji skryptu powłoki. Średnik jest podobnie chroniony za pomocą ukośnika odwrotnego, chociaż w tym przypadku można było zastosować pojedyncze cudzysłowy.{}
cytowania.