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

时间:2016-03-16 11:15:06

标签: bash unix awk sed file-rename

我想在文件夹中添加多个文件以缩短名称。这是输入文件

输入

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或重命名或sed实现这一目标。任何帮助,将不胜感激。我能够删除带有排序但不是数字的字符串。

2 个答案:

答案 0 :(得分:3)

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

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

如果您没有rename,请使用此for循环:

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

答案 1 :(得分:0)

这可能适合你(GNU sed):

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

或:

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

其中shell可以是bash