Список всех файлов, которые не имеют расширений

11

Я хочу перечислить все файлы в каталоге, которые не имеют расширений.

Например:

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

Какую команду я могу использовать вместо ls -someOption?

NewMrd
источник
Обычно, если вы хотите узнать параметры команды, прочитайте ее справочную страницу, набрав «man <command>» в терминале. человек выступает за руководство (помощь). например, man ls
aaditya1234
@AadityaBagga В этом случае ответ не найден в руководстве.
Висбуки
В этом сценарии вы считаете .gitignoreрасширение?
Амит Найду

Ответы:

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

Вы обнаружите, что при этом будет показано содержимое каждого каталога в рабочем каталоге. Если вы не хотите этого, используйте:

ls -d !(*.*)

Вы можете поместить shopt -s extglobв ваших , ~/.bashrcчтобы он активируется при открытии терминала. В Ubuntu по умолчанию уже есть строка ~/.bashrc(для меня строка 13.04.04), которую вы можете раскомментировать, чтобы включить эту функцию (и globstar).

См . Вики Грега для получения дополнительной информации о различных параметрах оболочки. Обратите внимание, что это свойство оболочки bash, а не lsкоманды, поэтому вы можете использовать его с другими командами.

Кроме того, вы можете использовать

ls --ignore='*.*'

или

ls -I '*.*'

... которая является внутренней lsопцией, но extglob может быть применен к любой произвольной команде и поэтому, на мой взгляд, более полезен.

evilsoup
источник
1
OP не упомянул, какая оболочка, хотя я предполагаю, что bash предполагается. Если бы это был ksh, extglob не требуется. По умолчанию просто:ls !(*.*)
runrig
1
@runrig Вы совершенно правы, но, учитывая основную природу вопроса, я предположил, что OP использует оболочку bash по умолчанию.
evilsoup
10

И так ls | grep -v \\.и ls | grep -v "\."работает.

krowe
источник