Удалить строку между шаблоном из имени файла, используя bash или sed - PullRequest
0 голосов
/ 27 марта 2020

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

'Yethamaiyaa Yetham HD Extreme Quality .-V7NEP5gnTTY.mp3'

, где фактическое название дорожки составляет только

'Yethamaiyaa Yetham.mp3'

и эта дополнительная строка

'HD Extreme Quality .-V7NEP5gnTTY' прикреплена к каждому файлу.

Как удалить эту ненужную строку, начиная с HD и непосредственно перед .mp3. Проблема в том, что между строками маркеров есть дополнительная точка .. Кроме того, шаблон маркеров одинаковы для всех 400+ файлов. Любая помощь в решении проблемы приветствуется.

1 Ответ

0 голосов
/ 27 марта 2020
ls *.mp3 | sed  -n "s/^\(.*\) HD .*/mv -- '&' '\1.mp3'/p"  | bash

Приведенный выше код использует sed, чтобы удалить все с "HD" до конца имени файла. Часть имени файла перед «HD» фиксируется паренами, поэтому она может использоваться позже как \1. Вся строка заменяется необходимой командой mv. Я процитировал это очень осторожно, чтобы учесть пробелы в имени файла.

Если вы хотите видеть команды, которые он будет выполнять, не выполняя их, оставьте канал bash.

Команды предварительного просмотра:

ls *.mp3 | sed -n "s/^\(.*\) HD .*/mv -- '&' '\1.mp3'/p" 
...