Как удалить суффикс файла и часть пути из строки пути в Bash? - PullRequest
349 голосов
/ 24 сентября 2008

Учитывая путь к строковому файлу, например /foo/fizzbuzz.bar, как бы я использовал bash для извлечения только части fizzbuzz указанной строки?

Ответы [ 13 ]

2 голосов
/ 19 июня 2010

Остерегайтесь предложенного решения Perl: оно удаляет что-либо после первой точки.

$ echo some.file.with.dots | perl -pe 's/\..*$//;s{^.*/}{}'
some

Если вы хотите сделать это с Perl, это работает:

$ echo some.file.with.dots | perl -pe 's/(.*)\..*$/$1/;s{^.*/}{}'
some.file.with

Но если вы используете Bash, решения с y=${x%.*} (или basename "$x" .ext, если вы знаете расширение) намного проще.

1 голос
/ 20 августа 2014

Объединение ответа с наивысшим рейтингом и ответа с наивысшим рейтингом для получения имени файла без полного пути:

$ x="/foo/fizzbuzz.bar.quux"
$ y=(`basename ${x%%.*}`)
$ echo $y
fizzbuzz
1 голос
/ 15 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...