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


13

Я намагаюся з'ясувати, як перейменувати файли протягом останніх кількох годин.

У мене є 2000 таких файлів:

file.1.pdb
file.2.pdb
file.3.pdb

Я хотів би перейменувати ці файли на щось на зразок:

file.pdb.1
file.pdb.2
file.pdb.3

Ти не мав на увазі баш ?
avazula

4
@avazula Ні, будь ласка, читайте цю статтю: en.wikipedia.org/wiki/Batch_renaming
Алі Размдідех

@PerlDuck так;)
Алі Размдідех


2
Привіт, близькі виборці - чи всі ви насправді думаєте, що нам потрібне лише одне питання в тезі [batch-rename]? Чи є щось у пов’язаному дописі, що насправді допомагає із завданням у цьому питанні, крім ідеї використання rename? Мені здається, що якщо запитання про перейменування партії має конкретні деталі, ми повинні просто надати конкретні відповіді на нього.
Занна

Відповіді:


15

Якщо ви renameвстановили, ви можете використовувати

rename -n 's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # just watch what WOULD happen
rename    's/(\.\d+)\.pdb$/.pdb$1/' *.pdb   # actually rename the files

Команду renameможна встановити через

sudo apt install rename

11

Через mmv(перейменуйте кілька файлів за шаблонами підстановки) це легко:

mmv '*.*.*' '#1.#3.#2' *.pdb

або zmvз zshшкаралупи; це модуль, який дозволяє робити перейменування; див. приклади ZMV :

zmv -w '*.*.*' '$1.$3.$2' *.pdb

3
І те, mmvі zmvмені здається досить екзотичним. Ви не хочете трохи розробити, що вони таке і що вони роблять?
PerlDuck

2
Я додав посилання на їхню сторінку та приклади.
αғsnιη

mmvдосить класно. Здається, цей варіант перейменування краще підходить, ніж rename, хоча і менш гнучкий у плані відповідності імен.
JAB

11

Використання Perl rename:

rename -n 's/(\.\d+)(\.pdb)/$2$1/' *.pdb

Швидке пояснення:

  • *.pdbЗіставте всі файли, які закінчуються .pdb. (Вчинено оболонкою)
  • (\.\d+)Зіставити буквальну крапку, а потім одну чи кілька десяткових цифр. Парени створюють відповідну групу.
  • $2$1 Зворотну групу першого та другого матчів.
  • -nНіяких дій (імітувати). Якщо результат виглядає добре, запустіть команду ще раз без цього прапора.

1
ЛОЛ. Та сама думка. Ти був на 48 секунд швидшим.
PerlDuck

1
@PerlDuck Лол, так, така ж думка. Відповіді теж добре доповнюються: ви охоплюєте встановлення, я охоплюю синтаксис.
wjandrea

7

Ви можете використовувати цей сценарій:

for i in `seq 1 2000`; do
mv file.$i.pdb file.pdb.$i
done

Або ця дружня команда копіювання та вставки:

for i in `seq 1 2000`; do mv file.$i.pdb file.pdb.$i; done

Для використання вищевказаних команд, покладіть всі 2000 файлів у одну папку, а потім відкрийте термінал у цій директорії, а потім запустіть над ним команду.


5

Нещодавно nautilus, менеджер файлів за замовчуванням, отримав діалогове вікно перейменування пакетів. Він ще не достатньо потужний, щоб робити те, що ви хочете. Але на щастя, є тунар, альтернативний файловий менеджер, який можна встановити. За допомогою діалогового вікна перейменування тунарів ви можете робити все, що завгодно, використовуючи графічний інтерфейс.

Спочатку встановіть тунар:

sudo apt install thunar

Почніть тунар, перейдіть до каталогу, у якому є ваші файли. Потім виберіть їх усіх. Натисніть F2.

У діалоговому вікні, що відкриється, знову виберіть усі файли. Змініть режим на "Пошук і заміна" та на "Ім'я та суфікс". Поставте прапорець "Регулярне вираження". Тепер використовуйте наступні в якості пошуку та заміни шаблонів:

file\.(.+)\.pdb

і

file.pdb.$1

Нарешті натисніть кнопку перейменування.

Перевага цього способу полягає в тому, що ви отримуєте візуальний попередній перегляд того, що буде відбуватися до того, як ви перейменуєте насправді.

діалогове вікно перейменування


1
Ви можете змусити більшість програм друкувати англійські повідомлення за допомогою префіксації команди LC_MESSAGES=POSIX, наприклад LC_MESSAGES=POSIX free. Працює так само для графічних додатків, хоча у випадку стійких додатків, таких як Nautilus у його конфігурації за замовчуванням, потрібно спочатку припинити попередній екземпляр nautilus -q.
Девід Фоерстер

@DavidFoerster дякую за згадування, зображення замінено.
Себастьян Старк

3

Ви можете використовувати renameз util-linuxдля цього (команда називається rename.ulв Убунту):

rename.ul .pdb '' *
rename.ul "file." "file.pdb." *

Це спочатку видаляє .pdbрозширення з кінця, а потім знову вставляє його в середину.


1
Дуже здорово. Я не знав про це rename.ul. Синтаксис трохи, гм, несподіваний, але він насправді працює так, як ви рекламуєте. Плюс: він також має -nперемикач (не чіпай, просто скажи).
PerlDuck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.