linux - insira lista numerada de arquivos no meio de outra lista de arquivos numerados

2

Eu tenho uma pasta (apple) contendo arquivos

doc001.jpg
doc002.jpg
...
doc010.jpg, 

Outra pasta (banana) também contém arquivos

doc001.jpg   
...
doc150.jpg  

Como posso inserir o conteúdo da maçã na banana no meio e renomeá-los? Para que a pasta banana tenha seus arquivos existentes até doc050.jpg então

apple/doc001.jpg

torna-se

banana/doc051.jpg 

e em diante, e o anterior banana/doc051.jpg através banana/doc150.jpg ser renomeado banana/doc060.jpg através banana/doc160.jpg?

user114558
fonte

Respostas:

2

Esta não é a solução mais elegante, mas é fácil de entender e deve funcionar:

  1. Faça uma nova pasta de banana

    mkdir banana.new
    
  2. Copie os primeiros 50 arquivos (isto é um pouco mais difícil do que o necessário por causa do 0 s):

    for i in {1..9}; do cp banana/doc00$i.jpg banana.new/; done
    for i in {10..50}; do cp banana/doc0$i.jpg banana.new/; done
    
  3. Obter arquivos da Apple e renomeá-los

    i=51; find apple/ -type f | sort | \
      while read n; do cp $n banana.new/doc0$i.jpg; let i++; done 
    
  4. Obtenha o restante dos arquivos da banana e renomeie-os

    for i in {51..89}; do \
      let n=$i+10; cp banana/doc0$i.jpg banana.new/doc0$n.jpg; done
    for i in {90..99}; do \
     let n=$i+10; echo "cp banana/doc0$i.jpg banana.new/doc$n.jpg"; done
    for i in {100..150}; do \
     let n=$i+10; cp banana/doc$i.jpg banana.new/doc$n.jpg; done
    

Neste ponto, banana.new deve ser exatamente como você quer. Certifique-se de que é e depois renomeá-lo para banana.

terdon
fonte