【问题标题】:Renaming multiple files in a folder in unix重命名unix文件夹中的多个文件
【发布时间】:2016-03-16 11:15:06
【问题描述】:

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

输入

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 或 rename 或 sed 来实现这一点。任何帮助,将不胜感激。我可以删除带有排序但不是数字的字符串。

【问题讨论】:

标签: bash unix awk sed file-rename


【解决方案1】:

使用rename 实用程序可以做到:

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

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

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

【讨论】:

  • 两者都有效,更喜欢循环中的一个,因为它消耗的时间更少。我没有新[:digit:] 的东西。你能解释一下吗?
  • [[:digit:]] 是 POSIX 属性,用于匹配 glob 或正则表达式模式中的数字 [0-9]
  • 啊好吧,唯一的问题是识别_S,理想情况下这也应该工作for f in *.sorted.*; do mv "$f" "${f/_S[[0-9]]*.sorted}"; done
  • 请注意,这是 perl 脚本 rename 可在 Debian/Ubuntu 及其衍生产品中找到,但不一定存在于其他非基于 Debian 的 Linux 机器上,例如 Arch Linux , CentOS, Slackware 等,我相信在那些盒子上使用了 util-linux 的重命名。 tl;dr 你不能依赖重命名的行为。
【解决方案2】:

这可能对你有用(GNU sed):

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

或:

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

shell 可能是bash 等等

【讨论】:

    猜你喜欢
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2014-12-27
    • 1970-01-01
    相关资源
    最近更新 更多