在unix中重命名文件夹中的多个文件

Renaming multiple files in a folder in unix

我的文件夹中有多个文件,我想缩短名称。这是输入文件

输入

S_12_O_319_K27ac_S12818.sorted.bam
S_12_O_319_K27me3_S12815.sorted.bam
S_12_O_319_K4me1_S12816.sorted.bam
S_12_O_319_K4me3_S12817.sorted.bam
S_14_AS_11_K27ac_S12843.sorted.bam
S_14_AS_11_K27me3_S12840.sorted.bam
S_14_AS_11_K4me1_S12841.sorted.bam
S_14_AS_11_K4me3_S12842.sorted.bam
S_12_O_319_K27ac_S12818.sorted.bam.bai
S_12_O_319_K27me3_S12815.sorted.bam.bai
S_12_O_319_K4me1_S12816.sorted.bam.bai
S_12_O_319_K4me3_S12817.sorted.bam.bai
S_14_AS_11_K27ac_S12843.sorted.bam.bai
S_14_AS_11_K27me3_S12840.sorted.bam.bai
S_14_AS_11_K4me1_S12841.sorted.bam.bai
S_14_AS_11_K4me3_S12842.sorted.bam.bai

输出

S_12_O_319_K27ac.bam
S_12_O_319_K27me3.bam
S_12_O_319_K4me1.bam
S_12_O_319_K4me3.bam
S_14_AS_11_K27ac.bam
S_14_AS_11_K27me3.bam
S_14_AS_11_K4me1.bam
S_14_AS_11_K4me3.bam
S_12_O_319_K27ac.bam.bai
S_12_O_319_K27me3.bam.bai
S_12_O_319_K4me1.bam.bai
S_12_O_319_K4me3.bam.bai
S_14_AS_11_K27ac.bam.bai
S_14_AS_11_K27me3.bam.bai
S_14_AS_11_K4me1.bam.bai
S_14_AS_11_K4me3.bam.bai

请注意,我的文件有两个不同的扩展名,一个是*.bam,另一个是*.bam.bai。我想一次重命名所有这些以缩短名称。从所有这些中删除部分 _S12843.sorted。请注意,这是第 5 个下划线,而 _S12843 后面的数字对于不同的文件是不同的。唯一相似的模式是字符串 sorted。所以想截断整个部分以缩短名称。我怎样才能用 bash or rename or sed 来实现。任何帮助,将不胜感激。我可以删除排序后的字符串,但不能删除数字。

使用 rename 实用程序,您可以执行以下操作:

rename 's/_[^_.]+\.sorted//' *.sorted.*

如果你没有 rename 然后使用这个 for 循环:

for f in *.sorted.*; do
   mv "$f" "${f/_S[[:digit:]]*.sorted}"
done

这可能适合您 (GNU sed):

sed -r 's/^(.*)_[^_.]*\.[^.]*(.*)/mv "&" ""/e' file

或:

sed -r 's/^(.*)_[^_.]*\.[^.]*(.*)/mv "&" ""/' file | shell

其中 shell 可能是 bash