Como remover uma parte específica do nome de arquivo para vários nomes de arquivos no macOS

Como remover uma parte específica do nome de arquivo para vários nomes de arquivos no macOS

Eu tenho esses arquivos em um diretório.

Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz
Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz
Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz
Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz

Quero que a saída fique assim.

Mabel-A10_L001_R1_001.fastq.gz
Mabel-A5_L001_R1_001.fastq.gz
Mabel-A11_L001_R1_001.fastq.gz
Mabel-A6_L001_R1_001.fastq.gz

Responder1

Você pode tentar algo como renomeá-los:

for i in *
do
o=$(echo $i|awk -F_ '{print $1,$3,$4,$5}')
mv "$i" "$o"
done

Responder2

Este script gerará comandos shell que executam uma série de comandos 'mv' para realizar sua tarefa:

for FILE in *.fastq.gz
do
    L="${FILE%%_*}_"
    R="${FILE#${L}*_}";
    printf 'mv -vi "%s" "%s"\n' "$FILE" "$L$R"
done

Execute isso uma vez e examine a saída. Se houver muitos arquivos, você pode usar lesspara revisar os comandos.

Se tudo estiver certo, execute o comando novamente e canalize a saída para bash.

Funciona definindo a variável L para tudo o que resta do primeiro sublinhado no nome do arquivo, mais o próprio sublinhado. Em seguida, ele forma uma string R removendo a string em L da frente do nome do arquivo e removendo ainda mais para o próximo sublinhado.

mv -vi "Mabel-A10_GTAGAGGA_L001_R1_001.fastq.gz" "Mabel-A10_L001_R1_001.fastq.gz"
mv -vi "Mabel-A11_GCTCATGA_L001_R1_001.fastq.gz" "Mabel-A11_L001_R1_001.fastq.gz"
mv -vi "Mabel-A5_GGACTCCT_L001_R1_001.fastq.gz" "Mabel-A5_L001_R1_001.fastq.gz"
mv -vi "Mabel-A6_TAGGCATG_L001_R1_001.fastq.gz" "Mabel-A6_L001_R1_001.fastq.gz"

informação relacionada