我只想改变这个
cc211_AMBER_13062012i.II cc211_GROMOS_13062012i.II
cc211_CHARM_13062012i.II cc211_OPLS_13062012i.II
到
cc211_AMBER_15062012i.II cc211_GROMOS_15062012i.II
cc211_CHARM_15062012i.II cc211_OPLS_15062012i.II
我试过了,
find -name "*.13 *" | xargs rename ".13" ".15"
在3和第二个星号之间通常没有空间,这就是我所看到的斜体。基本上有很多答案可以解释当它在文件名末尾时该做什么,其中asterix似乎有用,但在这里我无法使它工作。
你得到的任何东西都会让我的生活变得更轻松!
编辑1:试用
-bash-4.1$ ls
cc211_AMBER_13062012.II cc211_GROMOS_13062012.II
cc211_CHARM_13062012.II cc211_OPLS_13062012.II
-bash-4.1$ rename 's/_13/_15/' cc*
-bash-4.1$ ls
cc211_AMBER_13062012.II cc211_GROMOS_13062012.II
cc211_CHARM_13062012.II cc211_OPLS_13062012.II
谢谢,
查理
答案 0 :(得分:25)
这个怎么样:
for i in *.II; do mv $i $(echo $i | sed 's/_13/_15/g'); done
这将在_13
_15
替换为.II
有关sed here的更多信息。
答案 1 :(得分:19)
纯bash
解决方案:
for i in cc*; do
mv "$i" "${i/_13/_15}"
done
答案 2 :(得分:6)
rename 's/_13/_15/' cc*
应该做你想做的事。在所有以'cc'开头的文件中,正则表达式s/_13/_15/
将_13
替换为_15
。
$ ls
cc211_AMBER_13062012.II cc211_GROMOS_13062012.II
cc211_CHARM_13062012.II cc211_OPLS_13062012.II
$ rename 's/_13/_15/' cc*
$ ls
cc211_AMBER_15062012.II cc211_GROMOS_15062012.II
cc211_CHARM_15062012.II cc211_OPLS_15062012.II
这只适用于较新的rename
perl版本。要查看您执行的版本man rename
。如果页面顶部显示
Perl程序员参考指南
你有perl版本。如果它说:
Linux程序员手册
你有标准(旧)版本。
对于旧版本,命令应为:
rename _13 _15 cc*
答案 3 :(得分:0)
我正在使用纯Linux解决方案:
### find all files that contains _DES in name and duplicate them adding _AUXLOCAL
for f in **/*_DES*; do
cp "$f" "${f%.DES}_AUXLOCAL"
done
###Rename all _AUXLOCAL files, removing _DES to _LOCAL
for f in **/*_AUXLOCAL*; do
mv "$f" "${f/_DES/_LOCAL}"
done
###Rename all _AUXLOCAL files, removing _AUXLOCAL
for f in **/*_AUXLOCAL*; do
mv "$f" "${f/_AUXLOCAL/}"
done
我希望它有所帮助