Пакетне перейменування файлів у папці


10

Як я можу викреслити якийсь текст із назви файлів у папці?

Зараз я намагаюся:

rename s/"NEWER_(.*?)"//g *

Але нічого не перейменовуючи

У мене є батьківська папка, з купою підпапок, всередині яких є файли, які OneDrive вважали б чудовою ідеєю додати "(NEWER_timestamp)" до цього, і я хотів би його видалити.

Приклади імен файлів:

getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)

2
Чи можете ви розмістити ім'я файлу прикладу?
муру

впевнений. оновлено питання з деякими
Кевін

Відповіді:


8

Спробуйте наступне:

find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +

./o7th.ico (NEWER_1417529135.81)                                 renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89)   renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87)                               renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89)                                 renamed as /o7pm.ico
  • Усі [^/]*(.*) .*$збігаються лише з останньою частиною шляху, яка не містить /. І
  • Наведений вище регекс (.*)- це група зіставлення всього після останнього /та перед пробілом . Його зворотний посилання буде $1.
  • .*$відповідає всім кінцем $назв файлів після пробілу.
  • Нарешті, замінивши частину перейменування s/.../REPLACEMENT/, ми просто зберегли відповідну групу, яка знаходиться між останньою \та пробілом, (.*)який відомий як група збігів.

2

Слід розглянути можливість використання лапок за межами регулярних виразів (усередині них вони приймаються буквально як лапки), і втекти (. Спробуйте;

rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*

Точність виразу може не знадобитися, але ви не можете бути занадто обережними під час зміни файлів.


все, що це робиться, зависає з reading filenames from STDINя вже в папці "Батьків", де всі ці файли
Кевін

@Kevin "Якщо в командному рядку не вказано назви файлів, імена файлів будуть прочитані за допомогою стандартного введення." А оскільки оболонка залишається *NEWER*такою, як це є, якщо розширень не знайдено, ви, мабуть, помилилися або використовуєте оболонку, яка замінила неперевершений підстановку нічим.
муру

скопійовано та вставлено в оболонку Ubuntu 14.10
Кевін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.