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

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

我必须通过删除每个文件名的前 5 个字符来重命名目录中的多个文件。
如何在 bash/shell 中执行此操作?我正在使用 Ubuntu 11.10。谢谢。

答案1

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

替补正则表达式insed表示匹配.字符串开头的任意五个字符( )^并将其删除。

答案2

Bash 有一些令人惊叹的脚本功能。以下是其中一种方法:

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

一个方便的方法来测试它要做的就是在命令前面添加一个 echo:

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

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

答案3

非常感谢大家的回答。以下是我遇到的情况:

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

答案4

我的看法:

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

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

相关内容