linux - insere uma 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á-lo? 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% anteriorbanana/doc051.jpg a banana/doc150.jpg é renomeado de banana/doc060.jpg a banana/doc160.jpg

    
por user114558 10.02.2013 / 23:04

1 resposta

2

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

  1. Crie 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. Pegue os arquivos da Apple e renomeie-os

    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ê deseja. Certifique-se de que é e renomeie-o para banana .

    
por 11.02.2013 / 00:03

Tags