Używając gnu find, myślę, że właśnie tego chcesz. Znajduje wszystkie prawdziwe pliki, a nie katalogi (typ-f), a dla każdego drukuje nazwę pliku (% p), kartę (\ t), rozmiar w kilobajtach (% k), przyrostek "KB", a następnie znak nowej linii (\ n).
find . -type f -printf '%p\t%k KB\n'
Jeśli polecenie printf nie formatować rzeczy tak, jak chcesz, możesz użyć exec, a następnie za pomocą polecenia chcesz wykonać na każdym pliku. Użyj {} dla nazwy pliku i zakończ polecenie średnikiem (;). W większości powłok wszystkie trzy z tych znaków powinny być ujęte odwrotnym ukośnikiem.
Oto proste rozwiązanie, które wyszukuje i wypisuje je używając „ls lH”, który pokaże wielkość w postaci czytelnej dla człowieka (k dla kilobajtów M dla megabajtów):
find . -type f -exec ls -lh \{\} \;
Jak jeszcze inna alternatywa, „wc -c” wypisze liczbę znaków (bajtów) w pliku:
find . -type f -exec wc -c \{\} \;
Ta wersja wykona proces "ls" dla każdego pliku. Jeśli masz wiele plików (powiedzmy ponad tysiąc), lepiej zoptymalizuj to poprzez: 'find. -name '* .ear' -exec ls -lh {} + \; '(rozszerzenie GNU) lub ' find. -name '* .ear' -print0 | xargs -0 ls -lh'. Możesz również dodać '-type f', jeśli interesują cię tylko pliki (lub dodaj' -d' do ls, jeśli chcesz, aby katalogi były zawarte bez ich zawartości). – ash108
Twoja odpowiedź nie wyklucza katalogów, więc skończysz także na katalogach, co oczywiście nie jest właściwe. –
To naprawdę nieskuteczny sposób robienia rzeczy - i niestety komentarze ash108 również nie są idealne. Znacznie lepiej jest użyć opcji -printf, aby znaleźć. – oskarpearson