如何通过删除bash中的字符来重命名多个文件?

我必须通过删除每个文件名的前5个字符来重命名目录中的多个文件。
我怎样才能做到这一点我bash /壳? 我使用的是Ubuntu 11.10。 谢谢。

一个简单的循环与一点sed将做的伎俩:

 % 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 

sed的替代正则expression式表示在string( ^ )的起始处匹配任意五个字符( .表示任何字符)并将其删除。

Bash有一些惊人的脚本可能性。 这里有一个方法:

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

一个方便的方法来testing它做什么是在命令前添加一个回声:

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

六个问号确保您只尝试这样做的文件名超过5个字符。

所有伟大的答案,谢谢。 这是在我的情况下工作:

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

你可以使用sed来做到这一点

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

我的两分钱:

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

${file:n}删除stringfile中的前n字符。