Как удалить все расширения имени файла из строки?

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

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

0
02.08.2020, 08:38
2 ответа

Допустим, у меня есть файлы с расширением.MP4:

.
├── 1.MP4
├── 2.MP4
└── 3_special.MP4

Если я правильно понимаю, вам нужны имена не -специальных файлов без расширения.MP4.

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

$ find. -name '*.MP4' -not -name '*_special.MP4'
./1.MP4
./2.MP4

Ваша команда sed будет работать как есть, потому что $в шаблоне привязывается к концу каждой строки:

$ find. -name '*.MP4' -not -name '*_special.MP4' | sed -e 's/\.MP4$//'
./1
./2

Командаbasenameфактически сделает большую часть этого за вас; вам даже не нужно sed! Основное использование basename— удаление каталога из начала пути, но он также поддерживает удаление суффиксов.

SYNOPSIS

basename string [suffix]

basenameпринимает только одно слово в позиции «строка», поэтому вам нужно использовать xargs для запуска его один раз для каждого файла.

$ find. -name '*.MP4' -not -name '*_special.MP4' | xargs -I -name- basename -name-.MP4
1
2
2
18.03.2021, 23:15

С ударом:

shopt -s extglob            # enable extglob
mylist=( !(*_special.MP4) ) # fill array but without files with suffix _special.MP4
echo "${mylist[@]%.MP4}"    # remove suffix.MP4
2
18.03.2021, 23:15

Теги

Похожие вопросы