Com bash
ou qualquer outro shell POSIX:
for f in *.fastq; do ext="${f##*.}"; echo mv -- "$f" "${f%?.*}.${ext}"; done
-
for f in *.fastq
itera 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)