在Linux中删除多个文件名称的一部分

时间:2017-01-05 09:54:07

标签: bash

我在目录中有几个fastq.gz文件。我想删除每个文件名的部分内容。

以下是文件名:

RES_1448_001_S289_L001_R1_001.fastq.gz
RES_1448_001_S289_L001_R2_001.fastq.gz
RES_1448_012_S300_L001_R1_001.fastq.gz
RES_1448_012_S300_L001_R2_001.fastq.gz

我想删除之后的S和3位数。我希望在删除后能够这样做

RES_1448_001_R1_001.fastq.gz
RES_1448_001_R2_001.fastq.gz
RES_1448_012_R1_001.fastq.gz
RES_1448_012_R2_001.fastq.gz

之前我问了一个类似的问题,但是被建议请求一个新问题来满足我现在的确切要求。

旧问题:Delete part of name of multiple files in Linux

2 个答案:

答案 0 :(得分:1)

使用此bashregEx可以帮到您。

#!/bin/bash

for file in *.fastq.gz
do
    if [[ $file =~ ^(.*)S([[:digit:]]{3})_L([[:digit:]]{3})_(.*)$ ]]
    then
        start="${BASH_REMATCH[1]}"
        end="${BASH_REMATCH[4]}"
        mv -- "$file" "${start}${end}"
    fi 
done

答案 1 :(得分:1)

使用rename

rename 's/S\d{3}_//' *.fastq.gz