Prawdopodobnie dlatego, że pytający o to poprosił, lsa ty wykorzystałeś find;) Podniosłem jednak ... To właściwe rozwiązanie
BloodPhilia
2
Jeśli użyjesz „find. -Not -empty -ls”, to włączy również bieżący katalog (tj. „.” W swoich wynikach), aby po prostu dołączyć bieżące pliki, użyj „find. -Type f -not -empty -ls”
user672009,
19
Jest to praca, ponieważ find ls nie jest wystarczająco potężny.
find -maxdepth 1-size +0-print
-maxdepth 1 - to mówi find, aby przeszukał tylko bieżący katalog, usuń, aby przejrzeć wszystkie podkatalogi lub zmień liczbę, aby zejść o 2, 3 lub więcej poziomów.
-size +0to mówi find, aby szukał plików o rozmiarze większym niż 0bajty. 0można zmienić na dowolny rozmiar.
-print mówi find, aby wydrukować pełną ścieżkę do znalezionego pliku
Edycja:
późne dodawanie: prawdopodobnie powinieneś również dodać -type fprzełącznik powyżej. To mówi find, aby znaleźć tylko pliki. Jak zauważono w komentarzach poniżej, -printzmiana nie jest tak naprawdę potrzebna.
Aby uniknąć ostrzeżenia, powinieneś je -maxdepth 1wcześniej umieścić -size +0. -printJest to również akcja domyślna, więc nie jest potrzebna.
cyr
@cYrus - Brak ostrzeżeń dla mnie (cygwin)
Nifle
Wdrożenia findróżnią się znacznie pod względem tego, jakie są prawidłowe opcje i gdzie mogą się udać. GNU find(co jest okropnie powszechne) wyświetli ostrzeżenie, jeśli zostanie wprowadzone -sizewcześniej -maxdepth.
Ls prawie nie ma opcji filtrowania plików: to nie jest jego zadanie. Filtrowanie plików jest zadaniem powłoki dla prostych przypadków (poprzez globbing) i wyszukiwaniem dla skomplikowanych przypadków.
W zsh możesz Lkwalifikator globbing zachować tylko pliki o rozmiarze> 0 ( .kwalifikator ogranicza się do zwykłych plików):
ls *(.L+0)
Użytkownicy innych powłok muszą użyć find. Z GNU find (jak najczęściej w Linuksie):
find -maxdepth 1-type f !-empty -exec ls {}+
Sposobem zgodnym z POSIX jest:
find .-type f -size +0c-exec ls {}+-o -name .-o -prune
Jeśli lsnie był tylko przykład, a ty po prostu zamierza oględziny, można sortować według wielkości: ls -S.
ls
a ty wykorzystałeśfind
;) Podniosłem jednak ... To właściwe rozwiązanieJest to praca, ponieważ find ls nie jest wystarczająco potężny.
-maxdepth 1
- to mówi find, aby przeszukał tylko bieżący katalog, usuń, aby przejrzeć wszystkie podkatalogi lub zmień liczbę, aby zejść o 2, 3 lub więcej poziomów.-size +0
to mówi find, aby szukał plików o rozmiarze większym niż0
bajty.0
można zmienić na dowolny rozmiar.-print
mówi find, aby wydrukować pełną ścieżkę do znalezionego plikuEdycja:
późne dodawanie: prawdopodobnie powinieneś również dodać
-type f
przełącznik powyżej. To mówi find, aby znaleźć tylko pliki. Jak zauważono w komentarzach poniżej,-print
zmiana nie jest tak naprawdę potrzebna.źródło
-maxdepth 1
wcześniej umieścić-size +0
.-print
Jest to również akcja domyślna, więc nie jest potrzebna.find
różnią się znacznie pod względem tego, jakie są prawidłowe opcje i gdzie mogą się udać. GNUfind
(co jest okropnie powszechne) wyświetli ostrzeżenie, jeśli zostanie wprowadzone-size
wcześniej-maxdepth
.find dirname -type f ! -empty
źródło
Ls prawie nie ma opcji filtrowania plików: to nie jest jego zadanie. Filtrowanie plików jest zadaniem powłoki dla prostych przypadków (poprzez globbing) i wyszukiwaniem dla skomplikowanych przypadków.
W zsh możesz
L
kwalifikator globbing zachować tylko pliki o rozmiarze> 0 (.
kwalifikator ogranicza się do zwykłych plików):Użytkownicy innych powłok muszą użyć find. Z GNU find (jak najczęściej w Linuksie):
Sposobem zgodnym z POSIX jest:
Jeśli
ls
nie był tylko przykład, a ty po prostu zamierza oględziny, można sortować według wielkości:ls -S
.źródło
Jeśli zamierzasz używać
ls
, potrzebujesz trochę pomocyawk
.źródło
będzie działać lepiej, jeśli chcesz mieć wszystkie niepuste pliki, a nie tylko katalogi.
źródło
Bash 4.0+
źródło