Оболочка использует sed для удаления расширения из результатов поиска - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь запустить

find . \ -type f -name "*.sh" -exec basename {} \; | sed "s/.sh/ "

для отображения всех файлов в текущей директории и подкаталогах, заканчивающихся на .sh. Я использую -exec basename {}, чтобы удалить местоположение файла, поэтому я просто получаю сами имена файлов. Команда find работает нормально, но когда я передаю ее в sed "s/.sh/ ", я получаю сообщение об ошибке sed: 1: "s/.sh/ ": unterminated substitute in regular expression. Я пытаюсь заменить расширение .sh ничем, поэтому я просто получаю имена файлов.

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

basename может удалить расширение для вас.

find . -type f -name '*.sh' -exec basename {} .sh \;

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

Если ваша команда basename поддерживает это, вы можете использовать опцию -s, чтобы свести к минимуму количество необходимых вызовов на basename.

find . -type f -name '*.sh' -exec basename -s .sh {} +

Это позволяет нескольким именам файлов передаваться на каждый вызов basename.

0 голосов
/ 17 мая 2018

Вы пропускаете только закрытие / на седе.

find . -type f -name "*.sh" -exec basename {} \;  | sed "s/\.sh//"
...