13

I have been trying to figure out how to rename files for the past few hours.

I have 2000 files that are like this:

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

I would like to rename these files to something like:

file.pdb.1
file.pdb.2
file.pdb.3
5
  • Didn't you mean bash?
    – avazula
    Mar 29, 2018 at 15:38
  • Okay, my bad sorry guys, I did googled batch before commenting and didn't see the connection with the massive renaming of your files. Now that you say I get it :)
    – avazula
    Mar 29, 2018 at 16:03
  • 6
    Possible duplicate of How to easily rename files using command line?
    – wjandrea
    Mar 29, 2018 at 16:09
  • I know it's on unix, and so this is super easy with the command line, but if you want a gui, then Bulk Rename Utility is excellent.
    – will
    Mar 30, 2018 at 13:59
  • 2
    Hey close voters - do you all really think we only need one question in the [batch-rename] tag? Is there anything in the linked post that actually helps with the task in this question, except the idea of using rename? It seems to me that if a batch renaming question has specific details, we should just provide specific answers to it.
    – Zanna
    Mar 31, 2018 at 9:41

6 Answers 6

16

If you have rename installed, you can use

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

The command rename can be installed via

sudo apt install rename
11

Through mmv (rename multiple files by wildcard patterns) it's mush easy:

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

or zmv of zsh shell; it's a module that allows to do rename; see ZMV-Examples:

zmv -w '*.*.*' '$1.$3.$2' *.pdb
3
  • 3
    Both mmv and zmv seem rather exotic to me. Do you mind elaborating a bit what they are and what they do?
    – PerlDuck
    Mar 29, 2018 at 18:10
  • 2
    I added a links to their manpage and examples. Mar 29, 2018 at 18:36
  • mmv is pretty cool. Seems better-suited to this kind of renaming than rename, albeit being less flexible in terms of name matching.
    – JAB
    Mar 30, 2018 at 20:11
11

Using Perl rename:

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

Quick explanation:

  • *.pdb Match all files that end with .pdb. (Done by the shell)
  • (\.\d+) Match a literal dot, then one or more decimal digits. The parens create a match group.
  • $2$1 Reverse the first and second match groups.
  • -n No action (simulate). If the output looks good, run the command again without this flag.
2
  • 1
    LOL. Same thought. You were 48 seconds quicker.
    – PerlDuck
    Mar 29, 2018 at 16:02
  • 1
    @PerlDuck Lol, yeah, same thought. The answers complement quite well too: you cover installation, I cover syntax.
    – wjandrea
    Mar 29, 2018 at 16:04
8

You can use this script:

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

Or this copy-paste friendly command:

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

For use above commands, put all 2000 files in one folder and then open terminal in that directory, then run above command in it.

5

Recently nautilus, the default file manager, received a batch rename dialog. It is not yet powerful enough to do what you want. But luckily there is thunar, an alternative file manager that can be installed. With thunars rename dialog you can do what you want using the GUI.

First install thunar:

sudo apt install thunar

Start thunar, navigate to the directory that has your files. Then select all of them. Press F2.

In the dialog that opens, again, select all files. Change mode to "Search & Replace" and to "Name & Suffix". Check "Regular Expression". Now use the following as search and replace patterns:

file\.(.+)\.pdb

and

file.pdb.$1

Finally click the rename button.

The advantage of this way is that you get a visual preview of what will happen before you actually do the renaming.

thunar rename dialog

2
  • 1
    You can make most programs print English messages by prefixing the command with LC_MESSAGES=POSIX, e. g. LC_MESSAGES=POSIX free. Works the same for graphical applications although in the case of persistent applications like Nautilus in its default configuration you need to terminate the previous instance with nautilus -q first. Mar 30, 2018 at 16:00
  • @DavidFoerster thanks for mentioning, image replaced. Mar 30, 2018 at 22:50
3

You can use rename from util-linux for this (the command is called rename.ul in ubuntu):

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

This first removes the .pdb extension from the end and then re-inserts it into the middle.

1
  • 1
    Pretty cool. I wasn't aware of rename.ul. The syntax is a bit, um, unexpected, but it actually works the way you advertise. Plus: it also has a -n (don't touch, just tell) switch.
    – PerlDuck
    Mar 29, 2018 at 17:40

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .