我必须通过删除每个文件名的前 5 个字符来重命名目录中的多个文件。
我怎样才能做到这一点我 bash/shell?我正在使用 Ubuntu 11.10。谢谢。
Jam*_*man 13
一个简单的 for 循环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
Run Code Online (Sandbox Code Playgroud)
替代正则表达式中sed说,任何五个字符(符合.手段的任何字符)在字符串(开始^),并删除它。
Lad*_*ada 10
Bash 有一些惊人的脚本可能性。这是一种方法:
for file in ??????*; do mv $file `echo $file | cut -c6-`; done
Run Code Online (Sandbox Code Playgroud)
测试它会做什么的一个方便的方法是在命令前添加一个 echo:
for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done
Run Code Online (Sandbox Code Playgroud)
六个问号确保您只尝试对超过 5 个字符的文件名执行此操作。
您可以使用 sed 来执行此操作
for file in * ; do mv $file $(echo $file |sed 's/^.\{5\}//g'); done
Run Code Online (Sandbox Code Playgroud)