【问题标题】:Bulk renaming file names in Ubuntu/Linux with variable pattern在 Ubuntu/Linux 中使用变量模式批量重命名文件名
【发布时间】:2018-11-10 13:29:04
【问题描述】:

我正在努力用要删除的变量模式重命名一堆文件。

我有:

1B_ACTCGCTA-CCTAGAGT_L001_R1_001.fastq.gz
1B_ACTCGCTA-CCTAGAGT_L001_R2_001.fastq.gz

97C_TAAGGCGA-TTATGCGA_L001_R1_001.fastq.gz
97C_TAAGGCGA-TTATGCGA_L001_R2_001.fastq.gz

98A_S62_L001_R1_001.fastq.gz
98A_S62_L001_R2_001.fastq.gz

并且想拥有:

1B_R1_001.fastq.gz
1B_R2_001.fastq.gz

97C_R1_001.fastq.gz
97C_R2_001.fastq.gz

98A_R1_001.fastq.gz
98A_R2_001.fastq.gz

正如您所见,需要删除的模式是可变的,简单的匹配不起作用。 一个合乎逻辑的解决方法是排除第一个和第三个下划线或第一个下划线和字母“R”之间的所有内容。 不幸的是,我无法提出可以做到这一点的代码。 它可以是任何东西,只要它可以工作,重命名,bash for in 循环等......

感谢您的帮助, 否认

编辑:我试图使用 for 循环,但无法提供完整的代码来保留文件名的第二部分(字母“R”之后的所有内容)

for file in *.fastq.gz; do echo mv "${file}" "${file/_*/\/}"; done

【问题讨论】:

  • @Inian 完成,谢谢。

标签: bash ubuntu for-loop rename file-rename


【解决方案1】:

以下应该有效:

for f in *.fastq.gz; do echo mv "$f" "${f%%_*}_${f#*_*_*_}"; done

我在mv 之前特别添加了echo,所以它会打印出它会移动的内容。如果打印正确,请删除 echo 并再次运行。

这里发生的事情是我通过 %% 获取头部,通过 # 获取尾部并将它们连接起来。有关 %% 和 # 的含义,请参阅 man bash 中的 Parameter Expansion。该解决方案依赖于文件名中 _ 的数量保持不变。

【讨论】:

  • 我刚刚对我的原始帖子进行了编辑,我已经完成了一半:) 我知道回声。这就像一个魅力。谢谢,您拯救了这一天!
【解决方案2】:

使用 (Perl) rename:

rename --dry-run 's/_.*_R/_R/' *gz

样本输出

'1B_ACTCGCTA-CCTAGAGT_L001_R1_001.fastq.gz' would be renamed to '1B_R1_001.fastq.gz'
'1B_ACTCGCTA-CCTAGAGT_L001_R2_001.fastq.gz' would be renamed to '1B_R2_001.fastq.gz'
'97C_TAAGGCGA-TTATGCGA_L001_R1_001.fastq.gz' would be renamed to '97C_R1_001.fastq.gz'
'97C_TAAGGCGA-TTATGCGA_L001_R2_001.fastq.gz' would be renamed to '97C_R2_001.fastq.gz'
'98A_S62_L001_R1_001.fastq.gz' would be renamed to '98A_R1_001.fastq.gz'
'98A_S62_L001_R2_001.fastq.gz' would be renamed to '98A_R2_001.fastq.gz'

【讨论】:

    【解决方案3】:

    不依赖下划线数量的答案:

    for file in $(ls); do
        mv $file $(echo $file | awk -F _ 'BEGIN {OFS="_"} {print $1, $(NF-1), $NF}');
    done
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-16
      • 2021-06-17
      • 2014-11-13
      • 1970-01-01
      • 2016-04-09
      • 2015-12-13
      • 2017-09-19
      • 1970-01-01
      相关资源
      最近更新 更多