2012-04-09 13 views
37

Poszukuję polecenia Unix, aby wydrukować pliki o takim rozmiarze. Użyłem tego, ale to nie zadziałało.Znajdź pliki o rozmiarze w systemie Unix

find . -size +10000k -print. 

Chcę wydrukować rozmiar pliku wraz z nazwą pliku/katalogu.

+2

polecenie to daje mi 'find: nieznany predykat„-print.'' I domniemywać '.' jest naprawdę nie istnieje. Precyzja jest ważna. –

+0

Stack Overflow to strona z pytaniami dotyczącymi programowania i programowania. To pytanie wydaje się być nie na temat, ponieważ nie chodzi o programowanie czy rozwój. Zobacz [Jakie tematy mogę tu zadać] (http://stackoverflow.com/help/on-topic) w Centrum pomocy. Być może lepszym rozwiązaniem będzie [Super użytkownik] (http://superuser.com/) lub [Unix i Linux Stack Exchange] (http://unix.stackexchange.com/). Zobacz także [Gdzie mogę publikować pytania na temat Dev Ops?] (Http://meta.stackexchange.com/q/134306) – jww

Odpowiedz

37
find . -size +10000k -exec ls -sd {} + 

Jeśli wersja find nie zaakceptuje notacji + (który działa raczej jak xargs robi), a następnie można użyć (GNU find i xargs, więc find prawdopodobnie obsługuje + tak):

find . -size +10000k -print0 | xargs -0 ls -sd 

lub możesz wymienić + na \; (i żyć ze względną nieefektywnością tego) lub możesz żyć z problemami powodowanymi przez spacje w nazwach i używać przenośnego:

find . -size +10000k -print | xargs ls -sd 

-d na poleceniach ls zapewnia, że ​​jeśli katalog jest kiedykolwiek znaleziono (mało prawdopodobne, ale ...), to informacja zostanie wydrukowany katalog, a nie plików w katalogu. A jeśli szukasz plików większych niż 1 MB (jak sugeruje teraz usunięty komentarz), musisz dostosować +10000k do 1000k lub może +1024k lub +2048 (dla bloków 512-bajtowych, domyślną jednostką dla -size) . Spowoduje to wyświetlenie rozmiaru, a następnie nazwy pliku. Można także uniknąć konieczności dodania -d przez dodanie -type f do polecenia .

+0

dzięki. Użyłem find. -size + 300000k -print | xargs ls -sd 2>/dev/null –

3

Zakładając, że GNU znaleźć:

find . -size +10000k -printf '%s %f\n' 

Jeśli chcesz stałą szerokość na polu wielkości, można zrobić coś takiego:

find . -size +10000k -printf '%10s %f\n' 

Zauważ, że -size +1000k wybiera plików co najmniej 10.240.000 bajty (k to 1024, a nie 1000). Powiedziałeś w komentarzu, że chcesz plików większych niż 1M; jeśli to 1024 * 1024 bajtów, to:

find . -size +1M ... 

rade - oprócz tego, że będzie to również wydrukować rozmiaru i nazw plików, które są dokładnie 1024 * 1024 bajtów. Jeśli to ma znaczenie, możesz użyć:

find . -size +1048575c ... 

Musisz zdecydować, jakie kryterium chcesz.

+0

Aby uzyskać bajty (znaki) zamiast domyślnych bloków 512-bajtowych, potrzebujesz 'c' po' + 1048575'. –

+0

@ JonathanLeffler: Naprawiono, dziękuję! –

7

Znajdź można użyć do wydrukowania rozmiaru pliku w bajtach z% s jako printf. % h /% f drukuje odpowiednio prefiks katalogu i nazwę pliku. \ n wymusza znak nowej linii.

Przykład

find . -size +10000k -printf "%h/%f,%s\n" 

Wyjście

./DOTT/extract/DOTT/TENTACLE.001,11358470 
./DOTT/Day Of The Tentacle.nrg,297308316 
./DOTT/foo.iso,297001116 
+0

Interesujące. To powinno być udokumentowane jako rozszerzenie GNU (zakładam) do standardu POSIX ['find'] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html). –