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


10

我必须通过删除每个文件名的前5个字符来重命名目录中的多个文件。
bash / shell我该怎么做?我正在使用Ubuntu 11.10。谢谢。

Answers:


11

一个简单的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

替代正则表达式sed说,任何五个字符(符合.手段的任何字符)在字符串(开始^),并删除它。


9

Bash具有惊人的脚本编写可能性。这是一种方法:

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

以测试它的便捷方式做的是在命令前加上回声:

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

六个问号确保您仅尝试对长度超过5个字符的文件名执行此操作。


5

您可以使用sed执行此操作

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

5

所有好的答案,谢谢。这是在我的情况下有效的方法:

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

1

我的两分钱:

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

${file:n}删除n字符串中的第一个字符file


最优雅的答案。
三明治
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.