I have some files named like these:



How do I rename all them to, for example 63018933.mp4(remove characters after mp4)?


This could be one way:

for file in *.mp4\?token*; do mv --no-clobber "$file" "${file%%\?*}"; done
  • 1
    you might want to add -n or --no-clobber to mv if there's any chance that one of the mp4's might have the same name. Doesn't seem likely, but it costs nothing. – bsd Jan 11 '12 at 15:25

If you have the rename(1) tool (which you do if you have Debian or a Debian-based Linux, including Ubuntu and derivatives):

rename -n 's/\.mp4.*$/.mp4/' *mp4*

Once you're convinced you have the right pattern, just remove the -n (dry-run) and let it run properly.

rename(1) will apply a Perl regular expression to the filenames given it.

Note that on most other Linux distributions, rename is a different file renaming program, which doesn't help for this particular renaming pattern.


There is also mmv:

mmv -n "*.mp4*" "#1.mp4"

Remove the "-n" when output looks right.

protected by Community Oct 4 '15 at 18:07

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.