linux - insère une liste numérotée de fichiers au milieu d'une autre liste de fichiers numérotés

2

J'ai un dossier (apple) contenant des fichiers

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

Un autre dossier (banane) contient également des fichiers

doc001.jpg   
...
doc150.jpg  

Comment puis-je insérer le contenu de pomme dans la banane au milieu en les renommant? Alors que le dossier banane a ses fichiers existants jusqu’à doc050.jpg puis

apple/doc001.jpg

devient

banana/doc051.jpg 

et en avant, et le précédent banana/doc051.jpg à travers banana/doc150.jpg être renommé banana/doc060.jpg à travers banana/doc160.jpg?

user114558
la source

Réponses:

2

Ce n’est pas la solution la plus élégante, mais elle est facile à comprendre et devrait fonctionner:

  1. Faire un nouveau dossier banane

    mkdir banana.new
    
  2. Copiez les 50 premiers fichiers sur (c’est un peu plus difficile qu’il serait nécessaire à cause de la 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. Récupère les fichiers d'Apple et les renomme

    i=51; find apple/ -type f | sort | \
      while read n; do cp $n banana.new/doc0$i.jpg; let i++; done 
    
  4. Récupérez le reste des fichiers de banana et renommez-les

    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
    

À ce point, banana.new devrait être exactement comme vous le voulez. Assurez-vous que c'est puis renommez le en banana.

terdon
la source