Пакетное переименование имен файлов между дефисами с использованием bash
Я студент, и я очень новичок в bash, поэтому любая помощь очень ценится!
Я пытаюсь переименовать пакет файлов, которые выглядят так: local_date_1415+6556_0001.txt и local_date_1415+6556_0002.txt.
Пример имени файла: uuw_07052006_1415+6556_0001.txt
Мне нужен раздел "1415+6556" каждого имени файла, чтобы перед ним было 2M, например "2M1415+6556". Около половины файлов в папке уже имеют 2M, поэтому я не могу просто найти строку и заменить.
Есть ли способ переименовать пакет файлов, используя "_" в качестве разделителя, чтобы я мог полностью заменить все третьи разделы правильной строкой?
У меня есть команда переименования на моей машине, я просто не знаю, как ее использовать здесь.
1 ответ
Используя вашу версию rename
:
rename _ % *_????+*.txt # replace the first underscore with a percent
rename _ _2M *_????+*.txt # add 2M after the second underscore
rename % _ *_2M????+*.txt # return the first underscore back
Работает только если ваши имена файлов не содержат %
, Если они это сделают, выберите другого персонажа.
Вы также можете написать цикл самостоятельно:
#! /bin/bash
for f in *_????+*.txt ; do
before=${f%[0-9][0-9][0-9][0-9]+*}
after=${f#*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]}
mv "$f" "$before"2M"$after"
done