我必须通过删除每个文件名的前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字符。