Dateien in Unterordnern entpacken?

T

Thanquol

Grünschnabel
Hiho Scripter :)

ich stehe gerade vor folgender Situation:

Ich habe ca 50 Ordner, in diesen Ordnern gibts 2 Unterordner und darin ist jeweils eine .rar Datei (evtl. auch mehrere) die ich gerne script-technisch entpacken möchte.

Mittels dem Schnippsel was ich durch die Suche :rtfm: bereits finden konnte klappt das entpacken wenn ich direkt in dem letzten Ordner drin bin.

Code:
for file in *.rar; do
   unrar x -ad -o- "${file}" && echo "File konnte erfolgreich entpackt werden" && rm -f ${file} || echo "File konnte nicht erfolgreich entpackt werden"
done;

Nun würd ich das ganze aber im obersten Ordner starten, der durchläuft dann rekursiv alle Unterordner und führt den unrar Befehl dort aus.

Hat jemand einen tip für mich wie man das am besten realisiert?
OS = gentoo, 32Bit Intel Xeon Umgebung

Danke für eure hinweise!

Mfg,
Flo
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

ok bin doch noch fündig geworden ;)

geht zwar sicher einfacher aber es klappt:

find /mnt/sdb/PATH.../ -type d | ./entpacken.sh

Code:
#!/bin/bash
while read pfad
do
 cd $pfad
 
  echo "PFAD: $pfad"
	
	password=""
	
	if [[ "$pfad" =~ Kriterium1 ]]
		then password="pass1"
	fi	
	
	if [[ "$pfad" =~ Kriterium2 ]]
		then password="pass2"
	fi
	
	if [ $password != "" ]
		then password=-p$password
	fi
	
	echo "PASS: $password"
	
	for file in *.rar; do
 			unrar x -p- $password -o- ${file} && echo "File konnte erfolgreich entpackt werden" || echo "File konnte nicht erfolgreich entpackt werden"
	done;
done


das einzig "blöde":
wenn die Variable Passwort leer ist, bekomm ich hier eine Fehlermeldung:
if [ $password != "" ] ...

aber es tut was ich will!

:)

gn8!

Flo
 
Zuletzt bearbeitet:
Hallo,

mit unrar kenne ich mich zwar nicht besonders aus. Aber Dein Problem dürfte mit dem folgenden Script lösbar sein:
#!/bin/bash

# Wordsplitting auf Tab und Newline beschraenken
# Dateien duerfen Leerzeichen enthalten
IFS=$'\t\n'

auspacken ()
{
Passwort=""
case "$2" in
Kriterium1)
Passwort="pass1";;
Kriterium2)
Passwort="pass2";;
*)
esac
if [ -n "${Passwort}" ]; then
Passwort="-p${Passwort}"
fi
unrar x -p- ${Passwort} -o- "${1}"
}

check_dir ()
{
cd $1
for job in `ls ${1}`
do
if [ -d ${1}/$job ]; then
check_dir ${1}/$job
else
RAR=$(file ${1}/$job | grep -i ": RAR archive")
if [ "$RAR" != "" ]; then
auspacken $job ${1}
fi
fi
done
}

if [ "$1" == "" ]; then
B_eginn=$(pwd)
else
B_eginn=$1
fi

check_dir ${B_eginn}

Das Script hangelt sich von einem Unterverzeichnis ins nächste und prüft auf RAR-Dateien.

Die Parameter fürs auspacken habe ich aus Deinem Script-Auszug genommen. Die verschiedenen Passwörter können in der case-Anweisung eingetragen werden.

Tschüss

uverein
 

Ähnliche Themen

script sshpass

Verschlüsseltes Backup-Script mit rsync

Crontab und Scripts - Problem

[gelöst] - for file in ... nur für bestimmte Endungen?

HandbrakeCLI Shell Skript

Zurück
Oben