11

I have to rename multiple files in directory by removing first 5 characters for each filename.
How can I do this i bash/shell? I'm using Ubuntu 11.10. Thanks.

5 Answers 5

13

A simple for loop with a bit of sed will do the trick:

% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbaz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxfoo  
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 bar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 foo

The substitute regex in sed says to match any five characters (. means any character) at the start of the string (^) and remove it.

10

Bash has some amazing scripting possibilities. Here's one way:

for file in ??????*; do mv $file `echo $file | cut -c6-`; done

A handy way to test what it would do is to add an echo in front of the command:

for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done

The six question marks ensure that you only attempt to do this to filenames longer than 5 characters.

6

All great answers, thanks. This is what worked in my case:

rename 's/^.......//g' *
5

You can use sed to do this

for file in * ; do mv $file  $(echo $file |sed 's/^.\{5\}//g'); done
1

My two cents':

for file in *; do mv $file ${file:5}; done

${file:n} removes the first n characters in the string file.

1
  • most elegant answer.
    – Sandwich
    Apr 9, 2020 at 14:06

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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