Вы можете использовать
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