renomeia nomes de arquivos recursivamente para nomes mais simples [closed]

0

meus nomes de arquivos se parecem com:

A06_S6_L001_R1_001.fastq
A06_S6_L001_R2_001.fastq
B07_S6_L001_R1_001.fastq
B07_S6_L001_R2_001.fastq
C08_S6_L001_R1_001.fastq
C08_S6_L001_R2_001.fastq

e eu quero:

1A06.R1.fastq
1A06.R2.fastq
1B07.R1.fastq
1B07.R2.fastq
etc...

em outras palavras, eu quero manter a parte antes do primeiro sublinhado, a parte antes do último sublinhado, colocar um . entre eles, manter a extensão do arquivo e colocar um número na frente da coisa toda. Eu tenho o renome Perl, então eu estou supondo que seria melhor usar este comando, mas eu não sei regex ...

    
por jacob cowan 20.02.2018 / 21:44

2 respostas

1

prename abordagem:

prename -n 's/^([^_]+)_.*_([^_]+)_[0-9]+\./1$1.$2./' *.fastq

( -n - nenhuma ação ; mostra quais arquivos seriam renomeados)

    
por 20.02.2018 / 21:53
0

Com bash e dirname e uma suposição de 1 como o prefixo inicial:

shopt -s globstar
for file in ./**/*.fastq
do
  [[ $file =~ (...)_(..)_(....)_(..)_(...).fastq ]] && 
  printf "%s\n" "mv -- "$file" "$(dirname "$file")"/1${BASH_REMATCH[1]}.${BASH_REMATCH[4]}.fastq"
done

E com este exemplo "entrada":

touch A06_S6_L001_R1_001.fastq A06_S6_L001_R2_001.fastq B07_S6_L001_R1_001.fastq B07_S6_L001_R2_001.fastq C08_S6_L001_R1_001.fastq C08_S6_L001_R2_001.fastq
mkdir subdir
cp *.fastq subdir/

Esta é a saída resultante:

mv ./A06_S6_L001_R1_001.fastq ./1A06.R1.fastq
mv ./A06_S6_L001_R2_001.fastq ./1A06.R2.fastq
mv ./B07_S6_L001_R1_001.fastq ./1B07.R1.fastq
mv ./B07_S6_L001_R2_001.fastq ./1B07.R2.fastq
mv ./C08_S6_L001_R1_001.fastq ./1C08.R1.fastq
mv ./C08_S6_L001_R2_001.fastq ./1C08.R2.fastq
mv ./subdir/A06_S6_L001_R1_001.fastq ./subdir/1A06.R1.fastq
mv ./subdir/A06_S6_L001_R2_001.fastq ./subdir/1A06.R2.fastq
mv ./subdir/B07_S6_L001_R1_001.fastq ./subdir/1B07.R1.fastq
mv ./subdir/B07_S6_L001_R2_001.fastq ./subdir/1B07.R2.fastq
mv ./subdir/C08_S6_L001_R1_001.fastq ./subdir/1C08.R1.fastq
mv ./subdir/C08_S6_L001_R2_001.fastq ./subdir/1C08.R2.fastq

Remova o printf "%s\n" se os resultados parecerem corretos.

    
por 20.02.2018 / 21:55