Wyświetl wszystkie pliki, które nie mają rozszerzeń

11

Chcę wyświetlić listę wszystkich plików w katalogu, który nie ma rozszerzeń.

Na przykład:

$ ls
a.txt    b      c.pdf     d     e.png
$ ls -someOption
b       d

Jakiego polecenia mogę użyć zamiast ls -someOption?

NewMrd
źródło
Zwykle, jeśli chcesz poznać opcje polecenia, przeczytaj jego stronę podręcznika man, wpisując „man <polecenie>” w terminalu. man oznacza manual (pomoc). na przykład man ls
aaditya1234
@AadityaBagga W tym przypadku odpowiedzi nie ma w instrukcji.
wisbucky,
Czy w tym scenariuszu rozważasz .gitignorerozszerzenie?
Amit Naidu

Odpowiedzi:

14
shopt -s extglob ## enables extended globbing
ls !(*.*) ## matches every file except those containing a dot

Przekonasz się, że zrobienie tego spowoduje wyświetlenie zawartości każdego katalogu w katalogu roboczym. Jeśli nie chcesz tego, użyj:

ls -d !(*.*)

Można umieścić shopt -s extglobw twojej ~/.bashrcmieć ono aktywowane przy każdym otwarciu terminala. W domyślnym Ubuntu jest już wiersz ~/.bashrc(wiersz 29 dla mnie 13.04), którego możesz odkomentować, aby to włączyć (i globstar).

Zobacz wiki Grega, aby uzyskać więcej informacji na temat różnych opcji globowania powłoki. Zauważ, że jest to właściwość powłoki bash zamiast lspolecenia, więc możesz używać go z innymi poleceniami.

Alternatywnie możesz użyć

ls --ignore='*.*'

lub

ls -I '*.*'

... która jest lsopcją wewnętrzną , ale extglob można zastosować do dowolnego dowolnego polecenia, więc moim zdaniem jest bardziej użyteczny.

zła
źródło
1
OP nie wspomniał o tym, która powłoka, choć przypuszczam, że bash jest założony. Gdyby to był Ksh, nie wymaga extglob. Domyślnie po prostu:ls !(*.*)
runrig
1
@runrig Masz całkowitą rację, ale biorąc pod uwagę podstawowy charakter pytania, założyłem, że OP używa domyślnej powłoki bash.
evilsoup
10

Zarówno ls | grep -v \\.i ls | grep -v "\."działa.

krowe
źródło