2010-08-29 9 views
1

Voici ce que je veux faire:Bash Script pour extraire les fichiers d'archive Divise les rar

J'ai des milliers d'archives séparées sur rar Archives nom du dossier. Nom des fichiers 0001.part1.rar 0002.part2.rar 0003.part3.rar etc.

  1. lire 0001.part1.rar
  2. créer un répertoire basé sur le préfixe du fichier ci-dessus par exemple 0001
  3. déplacez tous les fichiers avec le même préfixe dans le répertoire créé ci-dessus.
  4. Extraire les fichiers dans ce répertoire
  5. supprimer tous les fichiers rar dans ce répertoire
  6. Renommez le fichier extrait basé sur une liste de noms à partir d'un fichier texte.
  7. Rar le fichier renommé avec différents arguments.
  8. Déplacez le fichier renommé (à partir de l'étape 6) vers un nouveau répertoire appelé Terminé.
  9. Passez au fichier 0002.part1.rar puis effectuez les étapes 2 à 8 et ainsi de suite.

De plus, comment l'incorporer avec cron ??? Cela devrait être exécuté une seule fois ...

Après extraction de la première série de fichiers de rar changer à:

file.001 
file.002 
file.003 

etc que je dois extraire aussi.

Précision sur l'étape 6:

Après extraction de la deuxième série de rar de (file.001, file.002 etc.) Je veux renommer la base d'une liste de noms à partir d'un fichier texte.

par exemple. Liste des fichiers à partir d'un fichier texte:

0001 - GB Funds.DAT 
0002 - US Bonds.DAT 
0003 - SG Securities.DAT 
0004 - LU Credits.DAT 

Précision sur l'étape 7:

After renaming the file I want to move it on a new folder called "Done" 

Précisions sur l'étape 9:

Go back to the main folder with all the other archives 
and continue extracting the next set of archives and 
do the same steps from 1 to 8. 
+0

montrez-nous ce que vous avez essayé. – ghostdog74

Répondre

0

Vous pouvez écrire un script shell, y compris quelque chose comme ceci:

# foo.sh 
set -e 
set -u 

for i in `find -max-depth 1 -type f -name '*.rar' | sed 's/\.part*\.rar$//' | sort -u`; do 
    mkdir $i 
    mv $i.part*rar $i 
    cd $i 
    unrar x $i.part1.rar 
    DST=`grep $i ../rename.txt | sed 's/^[0-9]\+ - //'` 
    mv $i "$DST" 
    # and so on, rar it together again, move it done directory etc. 
    cd .. 
done 

Lancez-puis via:

bash foo.sh 

Vous devez préciser 6./8./9.

Je ne sais pas pourquoi vous voulez l'exécuter via cron, puisque vous ne voulez l'exécuter qu'une seule fois. à est conçu pour exécuter des travaux ponctuels ou pour l'exécuter dans une session .

Je suggère que vous fassiez quelques tests avec 1-3 fichiers de votre collection et le script que vous finissez avec, avant de commencer le travail entier.

+1

Vous devrez 'cd' revenir au répertoire parent ou utiliser' pushd'/'popd' (ou un sous-shell). –

+0

hi maxschlepzig J'ai répondu à votre question. site ne permet pas de réponse longue donc j'ai mis à jour la question principale ci-dessus. – farneville

+0

@Dennis Williamson: Puisque le script est juste un échafaudage, cd .. et d'autres choses ont été laissées de côté. @farneville: J'ai mis à jour ma réponse pour montrer comment renommer les fichiers extraits. – maxschlepzig

Questions connexes