我想在文件夹中添加多个文件以缩短名称。这是输入文件
输入
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实现这一目标。任何帮助,将不胜感激。我能够删除带有排序但不是数字的字符串。
答案 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
等