Как переместить числа в именах файлов, в операции пакетного переименования?

13

Я пытался выяснить, как переименовать файлы в течение последних нескольких часов.

У меня есть 2000 файлов, которые похожи на это:

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

Я хотел бы переименовать эти файлы в нечто вроде:

file.pdb.1
file.pdb.2
file.pdb.3
user812758
источник
Разве ты не имел в виду Баш ?
авазула
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
PerlDuck
источник
11

Через mmv(переименовать несколько файлов с помощью шаблонов подстановки) это очень просто:

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

или zmvиз zshоболочки; это модуль, который позволяет делать переименование; см. ZMV-Примеры :

zmv -w '*.*.*' '$1.$3.$2' *.pdb
αғsнιη
источник
3
И то, mmvи другое zmvкажется мне довольно экзотичным. Вы не возражаете немного рассказать о том, что они из себя представляют и чем занимаются?
PerlDuck
2
Я добавил ссылки на их справочную страницу и примеры.
αғsнιη
mmvэто довольно круто Кажется, лучше подходит для такого переименования, чем rename, хотя и менее гибок в плане сопоставления имен.
JAB
11

Использование Perl rename:

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

Быстрое объяснение:

  • *.pdbСопоставьте все файлы, которые заканчиваются .pdb. (Сделано оболочкой)
  • (\.\d+)Совпадение с буквальной точкой, затем с одной или несколькими десятичными цифрами. Парены создают группу совпадений.
  • $2$1 Обратный первый и второй матч группы.
  • -nНикаких действий (симуляция). Если вывод выглядит хорошо, запустите команду снова без этого флага.
wjandrea
источник
1
ЛОЛ. Та же мысль. Вы были на 48 секунд быстрее.
PerlDuck
1
@PerlDuck Lol, да, та же мысль. Ответы тоже неплохо дополняют: вы рассматриваете установку, я - синтаксис.
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, файловый менеджер по умолчанию, получил диалоговое окно пакетного переименования. Он еще недостаточно силен, чтобы делать то, что вы хотите. Но, к счастью, есть Thunar, альтернативный файловый менеджер, который можно установить. В диалоге переименования thunars вы можете делать то, что хотите, используя графический интерфейс.

Сначала установите Thunar:

sudo apt install thunar

Запустите thunar, перейдите в каталог, в котором находятся ваши файлы. Затем выберите все из них. Нажмите F2.

В открывшемся диалоговом окне снова выберите все файлы. Измените режим на «Поиск и замена» и «Имя и суффикс». Проверьте «Регулярное выражение». Теперь используйте следующие шаблоны для поиска и замены:

file\.(.+)\.pdb

и

file.pdb.$1

Наконец нажмите кнопку переименования.

Преимущество этого способа заключается в том, что вы получаете визуальный предварительный просмотр того, что произойдет до того, как вы действительно сделаете переименование.

диалог переименования thunar

Себастьян Старк
источник
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расширение с конца, а затем снова вставляет его в середину.

user812791
источник
1
Довольно круто. Я не знал об этом rename.ul. Синтаксис немного неожиданный, но на самом деле он работает так, как вы рекламируете. Плюс: он также имеет -n(не трогай, просто скажи) переключатель.
PerlDuck