21

我只是想改变这个

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 之间通常没有空格,从我所看到的情况来看,这只是让它变成斜体。基本上,当它位于文件名的末尾时,有很多答案,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 
4

5 回答 5

30

这个怎么样:

for i in *.II; do mv $i $(echo $i | sed 's/_13/_15/g'); done

这将在所有带有扩展名的文件中替换_13_15.II

更多关于 sed的信息在这里

于 2012-06-15T15:26:19.357 回答
21

bash解决方案:

for i in cc*; do
  mv "$i" "${i/_13/_15}"
done
于 2012-06-15T15:44:39.743 回答
8
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

这仅适用于更新的 perl 版本的rename. 检查你有哪个版本man rename。如果页面顶部说

Perl 程序员参考指南

你有 perl 版本。如果它说:

Linux 程序员手册

你有标准(旧)版本。

对于旧版本,命令应该是:

rename _13 _15 cc*
于 2012-06-15T15:25:12.070 回答
0

在这种情况下,您可以使用以下命令:

rename -v "_130" "_150" *.II
于 2022-01-19T17:09:19.487 回答
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

我希望它有帮助

于 2017-09-06T10:08:02.187 回答