如何在Linux中批量重命名文件?

时间:2015-06-01 20:34:49

标签: linux bash

有30个文件名如下:

sample_kmer_41_2.lib1.bowtie.file1.27.faabyss_sample

我需要输出:

abyss_sample_kmer_41_2.lib1.bowtie.file1.27.fa

我不知道怎么做,我已经把这些名字搞砸了。谢谢你的帮助。

3 个答案:

答案 0 :(得分:4)

使用rename实用程序:

rename 's/(.*)\.fa(.*)_sample$/$2_$1/' *

rename是perl软件包的一部分,默认情况下安装在类似debian的系统上。有一个不同且不兼容的rename实用程序作为util-linux包的一部分提供。

答案 1 :(得分:2)

如果你有基于Perl的prename(可能名为rename)命令,那么:

prename 's/(.*)abyss_sample$/abyss_$1/' sample_kmer_*

使用的确切正则表达取决于名称的损坏程度。这适用于给出的示例名称;可能需要调整才能使用其他名称。

答案 2 :(得分:1)

你可以使用for循环。由于我总是对这些东西感到紧张,我建议先做一个回声,以确保一切看起来都很时髦...

#!/bin/bash
for FILE in sample_kmer_41_2*abyss_sample ; do
  NEWNAME=`echo $FILE | sed -e 's/abyss_sample//'`
  echo mv $FILE $NEWNAME
done

如果不需要调整,您可以删除echo或根据需要进行修改。