在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
等
我的文件夹中有多个文件,我想缩短名称。这是输入文件
输入
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
等