Как удалить имена файлов после первого символа / подчеркивания и переименования - PullRequest
0 голосов
/ 14 мая 2019

У меня есть каталог с именами файлов в этом формате:

DAM3D002_P_DAPedit.jpg

Мне нужно переименовать все имена файлов в:

DAM3D002.jpg

Я работаю над Linux / Ubuntu 18.04

Вот что я пробовал на bash:

for f in *.jpg; do mv "$f" "${f%_*.jpg}.jpg" ; done

Я ожидаю выхода:

DAM3D002.jpg

Но я получаю:

DAM3D002_P.jpg

1 Ответ

2 голосов
/ 14 мая 2019

Вы можете использовать

for f in *.jpg; do mv "$f" "${f%%_*.jpg}.jpg"; done

См. 10.1.Манипулирующие строки :

${string%%substring}Удаляет самое длинное совпадение $ подстроки из назад из $ string .

Как и , отмеченное l'L 'l , если имена ваших файлов * .jpg могут не содержать символов подчеркивания, приведенное выше решение добавит второй .jpg в конец имени файла.Если это нежелательно, используйте

for f in *.jpg; do echo "${f/_*.jpg/.jpg}"; done    

Онлайн-тест :

files=(1.jpg 1_2.jpg 1_2_3.jpg /a/b/c/1_2_3.jpg)
for f in "${files[@]}"; do echo "${f/_*.jpg/.jpg}"; done

Выход:

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