Як перейменувати групу файлів за тим, що у їхніх назвах схожий на шлях файлу Windows


9

У мене з'явилася купа файлів з ім'ям файлу, зіпсованим. Усі назви файлів мають однаковий початок, який, як видається, є файлами файлів Windows. Проблема в тому, що є 700+ файлів, і я дуже не хочу переглядати їх і перейменовувати їх вручну. Це приклади назв файлів (Примітка. Жодне з них не має каталогів файлів):

G:some\really\long\file\path\then\the\name1.jpg
G:some\really\long\file\path\then\the\name2.png
G:some\really\long\file\path\then\the\filename.txt
G:some\really\long\file\path\then\the\file_name.mov
...

Важливим питанням є те, що кожен файл має G:some\really\long\file\path\then\the\перед ім'ям файлу, який я хотів би.

Тому я хотів би, щоб перелічені вище файли виглядали так:

name1.jpg
name2.png
filename.txt
file_name.mov

Я спробував renameкоманду і не мав успіху. Я все ще новачок в Linux і дійсно не впевнений, як це зробити, чи справді, що робити в Google. Будь-яка допомога буде вдячна.

Відповіді:


18

Я просто прибрав все до останнього зворотного кута rename

$ rename -n 's/.*\\//' G*
rename(G:some\really\long\file\path\then\the\file_name.mov, file_name.mov)
rename(G:some\really\long\file\path\then\the\filename.txt, filename.txt)
rename(G:some\really\long\file\path\then\the\name1.jpg, name1.jpg)
rename(G:some\really\long\file\path\then\the\name2.png, name2.png)

Видаліть -nпісля тестування, щоб фактично перейменувати файли.

Примітки

  • -n не робіть нічого, просто надрукуйте те, що буде змінено
  • s/old/newзамінити oldнаnew
  • .* будь-яка кількість будь-яких символів
  • \\ Перший зворотний нахил - це уникнути другого.
  • Оскільки регулярні вирази жадібні, цей вираз також .*\\з'їдає всі попередні риски.
  • Оскільки два останні роздільники //порожні, все, що відповідає пошуковій частині, видаляється

Мені просто потрібен перший рядок, чи мені це потрібно робити для кожного файлу?
kingcobra1986

вам просто потрібен перший рядок @ kingcobra1986, інші - лише вихід. *відповідає всім файлам, але дозвольте мені змінити це на G*готове - тому тепер він відповідає всім файлам, починаючи з Gпоточного каталогу, і працюватиме над ними відразу. Якщо вони є в декількох довідниках, ми можемо з цим впоратися також різними способами
Zanna

Це спрацювало. Чи можете ви пояснити, що саме відбувається в цьому рядку?
kingcobra1986

1
@ kingcobra1986 Вибачте, я додав замітки. Сподіваюся, що це зрозуміло, якщо ні, будь ласка, попросіть більше!
Занна

Ха, мені подобається ідея використовувати .*\\ з того часу жадібну.*
Ziazis

10

Це можна зробити чисто, bashвикористовуючи розширення параметра оболонки .

${file##*\\}(префікс відрізування до останнього) знімає все від початку імені файлу до останнього \перегляду.

for file in *; do
    mv -v "$file" "${file##*\\}";
done

Результати перейменування:

‘G:some\\really\\long\\file\\path\\then\\the\\file_name.mov’ -> ‘file_name.mov’
‘G:some\\really\\long\\file\\path\\then\\the\\filename.txt’ -> ‘filename.txt’
‘G:some\\really\\long\\file\\path\\then\\the\\name1.jpg’ -> ‘name1.jpg’
‘G:some\\really\\long\\file\\path\\then\\the\\name2.png’ -> ‘name2.png’

6

Якщо ви шукаєте рішення GUI , існує багато додатків для масового перейменування. Я б запропонував Thunar , який є файловим менеджером за замовчуванням для Xfce. Він постачається із зручним інструментом масового перейменування. Ви можете встановити Thunar, виконавши таку команду в Terminal:

sudo apt-get install thunar

Ви, ймовірно, зможете встановити і з програмного забезпечення Ubuntu.

Як користуватися утилітою

  1. Після встановлення Thunar запустіть утиліту Bulk Rename .
  2. Клацніть на значку + та додайте файли, які ви хочете перейменувати.
  3. Клацніть на спадному вікні трохи нижче списку вибраних файлів та виберіть Пошук і замінити .
  4. У полі « Пошук»: введіть G:some\really\long\file\path\then\the\(частина, яку ви хочете позбутися), залиште поле « Замінити на:» порожнім. Ви повинні побачити попередній перегляд змін у стовпці Нове ім’я .
  5. Щоб застосувати зміни, натисніть кнопку Перейменувати файли .

Крім пошуку та заміни, ця утиліта підтримує такі дії:

  • Вставити дату / час
  • Вставка / Перезапис
  • Нумерація
  • Видалити символів
  • Верхня / маленька літера

хіба немає для nautilus (я думаю, що є!)? Здається, непосильним є пропозиція встановити для цього новий браузер файлів.
Занна

@Zanna Є одна версія в v3.22, але я думаю, що вона все ще не доступна в репост Ubuntu.
pomsky

2
Thunar є досить зручним і, здається, добре співіснує з іншими файловими браузерами, тому, я думаю, можливо, варто встановити його для цієї мети. Але чи можете ви розширити цю відповідь поясненням, як зробити масове перейменування в Thunar?
Елія Каган

1
@EliahKagan, і це теж легка вага
pomsky

Чудово зроблено, зараз я можу піднести заявку (у мене є Xubuntu, я теж можу його перевірити :))
Zanna
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.