Как выбрать файлы в сценарии bash, у которых нет расширения?

Предположим, у меня есть файлы xinitrc, alphabetsoup, ieat.pie в текущем каталоге. Вам нужен скрипт bash для выбора только xinitrc и alphabetsoup.

4 Solutions collect form web for “Как выбрать файлы в сценарии bash, у которых нет расширения?”

Баш расширенный glob +([^.]) Будет соответствовать файлам без каких-либо . от их имени. Это требует, чтобы вы не shopt extglob (в современных установках bash, он должен быть установлен по умолчанию). Образец означает:

любое число (но не менее одного) символов, отличных от .

Вы можете поместить все имена файлов в массив:

 NO_EXTENSION=( +([^.]) ) 

Вы можете распечатать имена файлов:

 printf "%s\n" +([^.]) 

Или передайте их всем утилите:

 ls -- +([^.]) 

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

 NO_EXTENSION=$(echo +([^.])) 

Вызов эха необходим для того, чтобы получить расширение имени пути, в отличие от случая массива. Я настоятельно рекомендую использовать массивы для такого списка, потому что вам не нужно беспокоиться о специальных символах в именах файлов.

Вы можете получить список файлов без полной остановки в своих именах в рабочем каталоге с помощью:

 find . -maxdepth 1 ! -name "*.*" 

Вы также можете иметь файлы, которые являются .file в unix, если вы хотите сопоставить их и file , но не file.ext то вы можете использовать:

 find . -maxdepth 1 ! -name "*.*" -o -name ".*[^.]*" 

С опцией extglob вы можете сопоставить дополнение к шаблону, то есть файлы, имя которых не соответствует шаблону. Файлы с расширениями – это те, которые соответствуют *.* , Поэтому файлы без расширения в текущем каталоге могут быть сопоставлены следующим образом:

 shopt -s extglob somecommand !(*.*) 

Обратите внимание, что файлы точек (файлы, чье имя начинается с . ) Не будут включены. Если вы хотите также их сопоставить и относитесь к ним как к неограниченному, если они не содержат второго . , вы можете использовать

 shopt -s extglob nullglob somecommand !(*.*) .!(*.*) 

или

 shopt -s dotglob extglob somecommand !(?*.*) 

Возможно, вы ищете это:

 $ ls | grep -v '\.' 

Пример:

 $ ls alphabetsoup ieat.pie xinitrc $ ls | grep -v '\.' alphabetsoup xinitrc 
  • Есть ли опция / команда для дифференциации файлов на основе состояния копии файла в каталоге?
  • Перечисление «компьютеров, подобных мне» в моей подсети?
  • Отформатируйте раздел справки о том, чтобы дефрагментировать флаг в одном столбце
  • Необходимо улучшить функцию urlencode
  • Как получить файл с наивысшим номером версии
  • поиск имен папок на основе списка, содержащегося в файле .txt
  • Что такое curl-эквивалент этой команды wget?
  • Как заставить скрипт использовать больше ресурсов?
  • scp с паролем и переименование файла
  • Есть ли какая-либо команда unix, которая не выполняет системный вызов во время выполнения?
  • Почему я должен дважды уйти от «точки»?
  • Interesting Posts

    Почему размеры блоков ограничены размером страницы в Linux?

    Изменение тайм-аута пароля sudo по умолчанию

    «Щелчок по X» в спектре

    Сохранять значения глобальных переменных через функции

    Прослушать порт, который уже указан как исходный порт установленного соединения?

    Кто начинает автоматические обновления?

    Что будет определяться приоритетом в конфликте между ~ / .ssh / config hostname и / etc / hosts?

    Не удается удалить Dropbox

    можно ли открывать файлы в подкаталогах с меньшим?

    Как перечислить все файлы в моей системе с определенной меткой времени?

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

    «watch-ing curl» дает неожиданный выход

    Маршруты Keagga ebgp не рекламируются для ibgp peers

    Невозможно изменить фон на рабочем столе

    Что такое resolv.conf и почему VPN клиент взломал его?

    Linux и Unix - лучшая ОС в мире.