Jak wyświetlać rozmiary plików „czytelne dla człowieka” w wynikach wyszukiwania?

11

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ć -lsna, -lshale nie jest to dozwolone.

Jak wyświetlić te wyniki w rozmiarach czytelnych dla ludzi (z przyrostkami k, M,…)?

blarg
źródło
Jaka jest twoja definicja czytelnego dla człowieka? Dla mnie jest to wystarczająco czytelne dla człowieka.
manatwork
Powinieneś wypróbować filenarzędzie z find.
Ramesh
@manatwork kb, mb, gb
blarg

Odpowiedzi:

10

findnie ma wyrafinowanych opcji takich jak ls. Jeśli chcesz ls -h, musisz zadzwonić ls.

find / -maxdepth 10 -size +100000 -exec ls -lh {} +

Polecam -xdevopcję unikania rekurencji w innych systemach plików, co byłoby bezużyteczne, jeśli martwisz się o miejsce na dysku.

find / -xdev -maxdepth 10 -size +100000 -exec ls -lh {} +

Jeśli używasz zsh jako powłoki find, możesz zamiast używać globalnych kwalifikatorów. Ograniczenie rozmiaru pliku jest proste: Lpo 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żyj dkwalifikatora glob; musisz znaleźć numer urządzenia, który możesz wyświetlić za pomocą statpolecenia pod Linuksem ( stat -c %d /aby wyświetlić tylko numer) lub z statwbudowanym programem zsh (uruchom, zmodload zsh/stataby go załadować).

ls -lh /**/*(L+M99d$(stat -c %d /))
Gilles „SO- przestań być zły”
źródło
4

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.

find / -maxdepth 10 -size +100000 -exec sh -c 'file -b {} | grep text &>/dev/null' \; -print

Innym sposobem na to jest użycie poniższego polecenia.

du -BM / | sort -nr

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.

du -ah / | grep -v "/$" | sort -h

Na moim komputerze nie miałem sort -hdostę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:

du -BM /home/ramesh/chk1/ | sort -nr

50M     /home/ramesh/chk1/
21M     /home/ramesh/chk1/Hierarchical_Clustering_Working
3M      /home/ramesh/chk1/checking_files
1M      /home/ramesh/chk1/checking/checking2
1M      /home/ramesh/chk1/checking/checking1
1M      /home/ramesh/chk1/checking/asdf
1M      /home/ramesh/chk1/checking
Ramesh
źródło
Czy istnieje sposób na ustawienie dolnej granicy drugiego polecenia? Największe pliki pojawiają się na górze i szybko znikają z wierzchu powłoki EDYCJA - Widzę, że musisz tylko usunąć r
blarg
Możesz przekierować dane wyjściowe do pliku, dodając > outputdo polecenia. Następnie możesz otworzyć plik i wyświetlić dane wyjściowe według
własnego
Widzę, że wyświetla również foldery, a ja tylko po plikach
blarg
du -a --max-depth=10 / | sort -rnjest blisko, z którym mógłbym wymyślić. Jednak w tym przypadku rozmiar nie będzie wyświetlany w KB, MB lub GB.
Ramesh
1

Myślę, że to, czego szukasz, jest bardziej podobne do następującego.

find / -maxdepth 10 -size +100000 -exec ls -lah {} + 

-execPozwala wykonać polecenie i {}jest podstawiony w wyniku znaleziska. Na koniec +należy powiedzieć, że jest to koniec polecenia i jest on wymagany.

Tim Hughes
źródło
2
Cytowanie tutaj jest w zasadzie całkowicie niepotrzebne {}. Pojedyncze cudzysłowy w poleceniu dotyczą powłoki, ale powłoka nigdy nie zobaczy ls -lah <args...>polecenia - widzi {}, co nie musi być cytowane. To, findco widzi ls -lah {}i to, findco rozszerza {}, i jak sugeruje nazwa -execopcji, findużywa exec*bezpośrednio wywołania systemowego dla argumentów, więc nie będzie żadnych problemów ze spacjami, ponieważ findnie będzie dzielił słów na twoich nazwach plików.
jw013
1
-aOpcja lsjest zbędne, ponieważ oczekuje się, że argumenty za pliki i katalogi nie. GNU znajduje zastosowania ls -dilsdla tej -lsopcji, więc replikuje to jak najściślej ls -dilsh.
jw013
man find podaje następujące informacje dla pierwszego przykładu użycia -exec : 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.
Tim Hughes
1
Strona podręcznika po prostu opowiada się za niepotrzebną ostrożnością. Nie zaszkodzi, ale nie znam żadnej powłoki, która wymaga {}cytowania.
jw013