使用 Bash 重命名名称中间多个文件的一小部分



我只想改变这个

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 

这个怎么样:

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

这将在所有具有扩展名的文件中将_13替换为_15 .II

有关 sed 的更多信息,请点击此处。

一个纯粹的bash解决方案:

for i in cc*; do
  mv "$i" "${i/_13/_15}"
done
rename 's/_13/_15/' cc*

应该做你想做的事。正则表达式s/_13/_15/_15 替换_13,以 开头的所有文件开头的 "cc"。

$ 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*

我使用的是纯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

我希望它有所帮助

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

rename -v "_130" "_150" *.II

最新更新