Com bash ou qualquer outro shell POSIX:
for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done
-
for f in *.fastqitera sobre os arquivos.fastq -
ext="${f##*.}"gets (${f##*.}) e salva a extensão do arquivo como variávelext -
${f%?.*}obtém a parte até o caractere que segue um caractere antes da última. -
mv "$f" "${f%?.*}.${ext}"faz a operação de renomeação, com o acréscimo da extensão com o prefixo cortado
Esta é uma corrida a seco; solte echo para ação real:
for f in *.fastq; do ext="${f##*.}"; mv -- "$f" "${f%?.*}.${ext}"; done
Se você tiver rename ( prename ):
rename -n 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq
-
Estamos aproveitando a correspondência gananciosa com
.*para corresponder à parte até o último. -
O primeiro grupo capturado contém a parte até o segundo último caractere antes de
. -
O segundo grupo capturado contém a parte após o último
.(incluindo o.)
Largue -n para a ação real:
rename 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq
Exemplo:
% ls -1d -- *.fastq
Stain-A_1P.fastq
Strain-A_2P.fastq
% for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done
mv -- Stain-A_1P.fastq Stain-A_1.fastq
mv -- Strain-A_2P.fastq Strain-A_2.fastq
% rename -n 's{^(./.*).(\..*)}{$1$2}s' ./*.fastq
rename(./Stain-A_1P.fastq, ./Stain-A_1.fastq)
rename(./Strain-A_2P.fastq, ./Strain-A_2.fastq)