Я провел много исследований, прежде чем задал этот вопрос. Я нашел другие ссылки для пакетного переименования, используя regex, как этот и другие подобные:
* На основе паттернов, переименование пакетного файла в терминале
Моя проблема в том, что я хочу сделать пакетное переименование с использованием Regex, но мой код не работает.
У меня внутри папки разные файлы с такими именами:
name_house_1_door.jpg
name_house_2_door.jpg
name_house_3_door.jpg
name_house_4_door.jpg
И я хочу переименовать файлы следующим образом:
name_house_1.jpg
name_house_2.jpg
name_house_3.jpg
name_house_4.jpg
Код, который приблизительно соответствует большей части того, что я хочу было:
$ rename -v 's/house\_[0-9]\_door/house_[0-9]/'
Но, как вы должны знать, первый файл был переименован в: name_house_ [0-9] .jpg
Необходимо использовать обратные ссылки . Классы символов ничего не означают в выражении замены. На самом деле немного символов имеют особые значения в выражении замены. Я предполагаю что-то как:
rename -v 's/house_([0-9])_door/house_$1/'
(или)
rename -v 's/(house_[0-9])_door/$1/'
кроме того, действительно используйте эти -n
флаг для наблюдения, какие переименования произойдут прежде на самом деле выполнить их.
Добавляющие круглые скобки вокруг эти [0-9] создадут необходимый подпоиск. Так как это - первый подпоиск, это может упоминаться как 1$ в стороне замены. Результат следует..
rename -v 's/house_([0-9])\_door/house_$1/' *
Hope это помогает.
Намного более легкий путь состоял бы в том, чтобы просто удалить _door
, использование переименовывает:
rename -v 's/_door//' *
Это ищет _door
и ничем заменяет его, по существу удаляя его.
Это работает в Shell
for file in *.jpg;
mv -n $file (basename $file _door.jpg).jpg;
end
Рыбы