У меня есть каталог с парой тысяч изображений. У большинства из них есть разумные имена файлов, такие как SD-000.tif SD-001.tif BX-000.tif и т.д.

Однако, вероятно, ~ 25% из них имеют такие имена, как BX-003_old.tif BX-004_veryold.tif

Как я могу переименовать проблемные файлы, удалив _word в конце каждого?

Файлы хранятся на сервере FreeBSD, однако каталог распределяется через samba.

Я пытался использовать комбинации sed и awk, но мне не повезло, заставляя их работать только с серединой файлов.

У кого-нибудь есть какие-либо идеи?

2 ответа2

1
newname=${filename%_*}.${filename##*.}

${filename%_*} дает часть перед последним подчеркиванием.
${filename##*.} дает вам часть после последней точки (расширение).

0

На случай, если в будущем у кого-то возникнет подобная проблема, я решил исправить это с помощью команды cut. Я побежал:

for i in *
do
mv $i `echo $i|cut -d"_" -f1`
done

Цикл просто выбирает все файлы в текущем каталоге, а cut -d указывает, чтобы обрезать все после указанного символа. В моем случае _.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .