регулярное выражение в `/ bin / sh` shell

Я хотел бы удалить все файлы, заканчивающиеся заданным набором расширений в определенном каталоге в оболочке /bin/sh . С помощью /bin/bash я могу сделать это с помощью regex следующим образом:

 rm path/(*.pdf|*.png) 

но это, похоже, не работает с обычным sh. Это нормально? Есть ли support регулярных выражений?

3 Solutions collect form web for “регулярное выражение в `/ bin / sh` shell”

Нет, это не будет работать в строго совместимой с POSIX оболочке. Вот нормативная ссылка:

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_03

Как вы можете видеть, определенно нет регулярных выражений, и даже не обозначать скобки {a, b}.

Как указано в ответе user3188445, это не соответствует POSIX.

Однако, если вы все равно хотите это сделать, вам нужно использовать другой инструмент, например find :

 find dir/ -maxdepth 1 -type f -regex ".*.pdf\|.*.png" -delete 

find поиск в -maxdepth 1 dir/ , а не рекурсивно ( -maxdepth 1 ), найден только файл ( -type f ). Регулярное выражение соответствует файлам .pdf и .png и -delete удаляет найденные файлы.

Чтобы проверить, какая оболочка вы действительно используете с / bin / sh, вызовите:

 /bin/sh whatshell.sh 

и выберите сценарий whatshell с этой страницы:

http://www.in-ulm.de/~mascheck/various/whatshell/

звоните, например, wget http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh

Типичный выход:

 $ sh whatshell.sh SVR4 Bourne shell (SunOS 5 variant) $ bosh whatshell.sh SVR4 Bourne shell (SunOS 5 schily variant) $ bash whatshell.sh bash 3.2.25(1)-release $ ksh whatshell.sh ksh88 Version (..-)11/16/88i $ ksh93 whatshell.sh ksh93 Version M 1993-12-28 s+ 

POSIX не требует оболочки POSIX в / bin / sh. Если вам нравится запускать вызов оболочки POSIX:

 PATH=`getconf PATH` export PATH sh 

обратите внимание, что если это приведет к запуску bash, оболочка не будет совместима с POSIX.

  • копирование определенных файлов в каталог
  • Почему `find -name * .jks` не возвращает некоторые файлы?
  • Как сделать bash glob строковой переменной?
  • tar исключить файлы * .zip
  • Bash захват звездочки внутри файла
  • ffmpeg -pattern_type glob - не загружать файлы в правильном порядке
  • find: значение \? знак как значение параметра имени
  • lftp исключает путаницу синтаксиса
  • Почему `find` иногда находит мой файл, иногда не
  • Как скопировать все файлы HTML из дерева каталогов в один каталог
  • Список файлов в каталоге с определенным расширением
  • Linux и Unix - лучшая ОС в мире.