Jeśli wydaję polecenie wyszukiwania w następujący sposób:
$ find . -name *.ear
Drukuje:
./dir1/dir2/earFile1.ear
./dir1/dir2/earFile2.ear
./dir1/dir3/earFile1.ear
To, co chcę `` wydrukować '' w wierszu poleceń, to nazwa i rozmiar:
./dir1/dir2/earFile1.ear 5000 KB
./dir1/dir2/earFile2.ear 5400 KB
./dir1/dir3/earFile1.ear 5400 KB
unix
command-line
find
solaris
Brian Hart
źródło
źródło
find . -name '*.ear' -exec ls -lh {} + \;
(rozszerzenie GNU) lubfind . -name '*.ear' -print0 | xargs -0 ls -lh
. Możesz także chcieć dodać,-type f
jeśli interesują Cię tylko pliki (lub dodać-d
do ls, jeśli chcesz, aby same katalogi były dołączone bez ich zawartości).-type f
liczenie tylko zwykłych plików.find . -name "*.ear" -type f
dla plików.-type d
działa dla katalogów.Musisz użyć -exec lub -printf. Printf działa tak:
-exec ma większe możliwości i pozwala na wykonywanie dowolnych poleceń - więc możesz użyć wersji „ls” lub „wc” do wydrukowania nazwy pliku wraz z innymi informacjami. 'man find' pokaże dostępne argumenty do printf, które mogą zrobić dużo więcej niż tylko rozmiar pliku.
[edytuj] -printf nie jest w oficjalnym standardzie POSIX, więc sprawdź, czy jest obsługiwany w twojej wersji. Jednak większość nowoczesnych systemów będzie korzystać z narzędzia GNU find lub podobnie rozszerzonej wersji, więc jest duża szansa, że zostanie zaimplementowany.
źródło
column
polecenie.find . -name *.ear -printf "%p %k KB\n" | column -t
-printf
opcja również nie działa w systemie OS X. Zobacz stackoverflow.com/questions/752818/… .prostym rozwiązaniem jest użycie opcji -ls w find:
To daje ci każdy wpis w normalnym formacie „ls -l”. Lub, aby uzyskać konkretny wynik, którego szukasz, to:
Co da ci nazwę pliku, a następnie rozmiar w KB.
źródło
ls
opcji, powinna ona znajdować się znacznie wyżej na liście odpowiedzi niż jest.Używając funkcji wyszukiwania gnu, myślę, że tego właśnie chcesz. Znajduje wszystkie prawdziwe pliki, a nie katalogi (-type f), i dla każdego z nich wypisuje nazwę pliku (% p), tabulator (\ t), rozmiar w kilobajtach (% k), przyrostek „KB”, a następnie nowa linia (\ n).
Jeśli polecenie printf nie formatuje rzeczy tak, jak chcesz, możesz użyć exec, a następnie polecenie, które chcesz wykonać na każdym pliku. Użyj {} jako nazwy pliku i zakończ polecenie średnikiem (;). W większości powłok wszystkie trzy znaki powinny być poprzedzone ukośnikiem odwrotnym.
Oto proste rozwiązanie, które wyszukuje i drukuje je przy użyciu „ls -lh”, które pokaże rozmiar w postaci czytelnej dla człowieka (k to kilobajty, M to megabajty):
Jako jeszcze jedna alternatywa, „wc -c” wypisze liczbę znaków (bajtów) w pliku:
źródło
-name '*.ear'
w przykładach, to powinna być odpowiedź nr 1. Dokładnie odpowiada na pytanie, wyjaśnia znaczenie składni i podaje wiele alternatyw.find . -type f -printf '%k KB\t %p\n'
np. Wydrukowanie rozmiaru pliku jako pierwsze, najprawdopodobniej będzie lepszym wynikiem pod względem formatowania ze względu na wyrównanie.To daje tylko rozmiar pliku, zamiast wszystkich niepotrzebnych rzeczy.
źródło
wc
działa w tym przypadku po prostu lepiej, jeśli potrzebujesz rozmiaru w bajtach.Awk może naprawić dane wyjściowe, aby podać dokładnie to, o co prosił pytający. W moim systemie Solaris 10 jako drugie pole znajdź rozmiar wydruków -ls w KB, więc:
W przeciwnym razie użyj -exec ls -lh i wybierz pole rozmiaru z wyniku. Ponownie w systemie Solaris 10:
źródło
Dlaczego nie użyć du -a ? Na przykład
Działa na komputerze Mac
źródło
Zmagałem się z tym na Mac OS X, gdzie polecenie find nie obsługuje
-printf
.Rozwiązaniem, które znalazłem, które wprawdzie opiera się na `` grupie '' dla wszystkich plików jako `` personelu '', było ...
To dzieli długie wyjście ls na trzy tokeny
Następnie wyprowadza tokeny 2 i 3, tj. Wyjście to liczba bajtów, a następnie nazwa pliku
źródło
find
jest dostępna przez homebrew za pomocąbrew install findutils
To powinno dostarczyć Ci tego, czego szukasz, wraz z formatowaniem (tj. Najpierw nazwa pliku, a później rozmiar):
przykładowe dane wyjściowe (gdzie
-iname "*.php"
uzyskiwałem jakiś wynik):źródło
Wypróbuj następujące polecenia:
GNU
stat
:BSD
stat
:jednak
stat
nie jest standardowe, więcdu
lubwc
mogłoby być lepszym podejściem:źródło
Możesz spróbować tego:
To da ci rozmiar w bajtach. Ale polecenie du akceptuje również parametry -k dla KB i -m dla MB. To da ci wynik podobny do
źródło
źródło
Odniesienie do Scripter World
źródło
źródło
Jeśli chcesz uzyskać całkowity rozmiar, oto propozycja skryptu
źródło