Unrar - Wie bleiben die Dateien im Original Ordner?

Massaguana

Enthusiast
Thread Starter
Mitglied seit
02.06.2012
Beiträge
19
Hallo Zusammen,

ich nutze ein root Server den ich über das Terminal steuere. Zeitweise muss ich hier Dateien entpacken... dazu habe ich mir unrar installiert, soweit funktioniert das tool auch, nur legt er die Dateien immer in die oberste ebene...

Mein Befehl:
Code:
unrar x -r *.rar

Laut --help soll die option x die Pfade beibehalten, tut sie aber nicht...

Meine Struktur sieht z.B. so aus:

Ich befinde mich in /home/USER dort gibt es dann die Struktur die ich entpacken möchte wie z.B,

Backup/Back20170524 in /Backup finden sich unzählige Ordner wie Backup20170524 23 22 usw.

Diese möchte ich nun so entpacken das die Daten im Orginal Ordner bei den rar Dateien verbleiben.

Wie stelle ich dies an? Aktuell landet alles in /home/USER

Grüße

Massaguana
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Heißt die Option tatsächlich x und nicht -x?
Eine Option ohne - davor wäre doch sehr ungewöhnlich.
 
Ja, die option ist tatsächlich x und nicht -x

wobei es z.B. auch Optionen mit - gibt, so z.B. -r für rekursiv

Siehe:
UNRAR 5.00 beta 3 freeware Copyright (c) 1993-2013 Alexander Roshal

Usage: unrar <command> -<switch 1> -<switch N> <archive> <files...>
<@listfiles...> <path_to_extract\>

<Commands>
e Extract files without archived paths
l[t[a],b] List archive contents [technical[all], bare]
p Print file to stdout
t Test archive files
v[t[a],b] Verbosely list archive contents [technical[all],bare]
x Extract files with full path

<Switches>
- Stop switches scanning
@[+] Disable [enable] file lists
ad Append archive name to destination path
ag[format] Generate archive name using the current date
ai Ignore file attributes
ap<path> Set path inside archive
c- Disable comments show
cfg- Disable read configuration
cl Convert names to lower case
cu Convert names to upper case
dh Open shared files
ep Exclude paths from names
ep3 Expand paths to full including the drive letter
f Freshen files
id[c,d,p,q] Disable messages
ierr Send all messages to stderr
inul Disable all messages
kb Keep broken extracted files
n<file> Additionally filter included files
n@ Read additional filter masks from stdin
n@<list> Read additional filter masks from list file
o[+|-] Set the overwrite mode
or Rename files automatically
ow Save or restore file owner and group
p[password] Set password
p- Do not query password
r Recurse subdirectories
sl<size> Process files with size less than specified
sm<size> Process files with size more than specified
ta<date> Process files modified after <date> in YYYYMMDDHHMMSS format
tb<date> Process files modified before <date> in YYYYMMDDHHMMSS format
tn<time> Process files newer than <time>
to<time> Process files older than <time>
ts<m,c,a>[N] Save or restore file time (modification, creation, access)
u Update files
v List all volumes
ver[n] File version control
vp Pause before each volume
x<file> Exclude specified file
x@ Read file names to exclude from stdin
x@<list> Exclude files listed in specified list file
y Assume Yes on all queries
 
Code:
for f in $(find $HOME -iname "*.rar") do
  rar e -inul $f
done
 
Zuletzt bearbeitet:
Code:
find . -iname '*.rar' \
| while read file; do
    cd "$(dirname "${file}")"
    unrar x "${file}"
done
 
Das Kommando x sorgt dafür, das die im rar-Archiv vorhandene Pfadstruktur wiederhergestellt wird.
Das das im aktuellen Verzeichnis passiert steht da nirgendwo.
Wenn du das im aktuellen Verzeichnis haben willst, musst du die Variable <path_to_extraxt> angeben.
Für das aktuelle Verzeichnis reicht da ein .
Also nicht "unrar x -r *.rar", sondern "unrar x -r *.rar ."
 
Das ist doch dann wieder das aktuelle, was sich nicht ändert, oder nicht?
 
Code:
find . -iname '*.rar' \
| while read file; do
    cd "$(dirname "${file}")"
    unrar x "${file}"
done

Also das funktioniert nicht. Ich erhalte eine Fehlermeldung:

Cannot open ./Backup/Backup20170502/Backup20170502.rar
Datei oder Verzeichnis nicht gefunden
No files to extract

Die Datei ist aber Vorhanden und lässt sich auch manuell entpacken...

- - - Updated - - -

Code:
for f in $(find $HOME -iname "*.rar") do
  rar e -inul $f
done

Da erhalte ich nur Syntax error... auch wenn ich "unrar" statt "rar" schreibe...
 
Ja, sorry. Das hier sollte gehen:

Code:
find . -iname '*.rar' \
| while read file; do
    cd "$(dirname "${file}")"
    unrar x "$(basename "${file}")"
done

Statt des Punktes hinter find geht auch ein beliebiger Pfad.
 
Zuletzt bearbeitet:
Dank dir. Das ganze funktioniert für das erste Verzeichnis. Leider gibt es für jedes folgende Archiv eine Fehlermeldung das die Datei oder das Verzeichnis nicht gefunden wurde.

EDIT: Ich denke das hier eventuell drum herum eine Schleife kommen muss... also so lang bis alles abgearbeitet ist.

Weiterhin würde ich gerne folgendes Automatisieren.

- Die Entpackte Datei mit der Endung *.mdb soll gleich den Ordner umbenannt werden.
 
Zuletzt bearbeitet:
Die Schleife ist da. while ...; do ...; done

Wie sieht die Meldung genau aus? Das muss so funktionieren.
 
Hier mal ein Auszug:

Code:
UNRAR 5.00 beta 3 freeware      Copyright (c) 1993-2013 Alexander Roshal

Cannot open Backup20170502.rar
Datei oder Verzeichnis nicht gefunden
No files to extract
./test.sh: Zeile 28: cd: ./Backups/Backup20170502: Datei oder Verzeichnis nicht gefunden

Dieser block wiederholt sich dann tausende male... das erste File der Dateien wurde erneut komplett entpackt. Der Pfad dazu lautet: /Backups/Backup20170501/Backup20170501.rar

Die Zeile 28 ist dann der unrar Befehl.

Grüße
Massaguana
 
Ich bin einfach nicht bei der Sache.

Code:
find . -iname '*.rar' \
| while read file; do
    (
        cd "$(dirname "${file}")"
        unrar x "$(basename "${file}")"
    )
done

Jetzt aber. Mit absoluten Pfaden hätte es funktioniert. Ich hab die relativen Pfade einfach nicht richtig beachtet.
 
Zuletzt bearbeitet:
Also dass funktioniert nun...jedenfalls im jungfräulichen Zustand... Danke sehr.

Wurde der Prozess warum auch immer unterbrochen und wird neu gestartet so übergeht das Script die Abfrage von Unrar und bricht nach dem ersten File ab... eher ein kosmetisches Problem... kann man mit leben.


Kann ich dann teile von deinem script für das Thema Umbenennen und löschen verwenden?

Dachte an so etwas hier:

Code:
read -p "Zielverzeichnis: " ZIELVERZEICHNIS
mkdir $ZIELVERZEICHNIS
find . -iname '*.rar' \
| while read file; do
    (
        cd "$(dirname "${file}")"
        unrar x "$(basename "${file}")"
        mv *.mdb $ZIELVERZEICHNIS"$(dirname "${file}")".mdb
        rm -f -r "$(dirname "${file}")"
    )
done

Das ganze habe ich mir so gedacht. Nach dem Entpacken wird das *.mdb file so benannt wie der Ordner z.b. Backup20170502.mdb dabei wird das ganze auch in ein mit read abgefragtes Verzeichnis verschoben. Dann wird der Original Ordner Verschoben.

was meinst du dazu?
 
Zuletzt bearbeitet:
Mit der Hilfe eines freundes bin ich nun soweit gekommen:

Code:
read -p "Zielverzeichnis: " ZIELVERZEICHNIS
mkdir $ZIELVERZEICHNIS
find . -iname '*.rar' | while read file; do
 (
   DIRNAME=$(dirname "${file}")
   BASENAME=$(basename "${file}")
   cd "${DIRNAME}"
   unrar x "${BASENAME}"
   NEW=$DIRNAME
   mv *.mdb  "${NEW}".mdb
   mv *.mdb /home/massaguana/$ZIELVERZEICHNIS
   rm -rf /home/massaguana/"${DIRNAME}"
)
done

Das funktioniert wie es bisher aussieht.
 
Zuletzt bearbeitet:
Bei dem Versuch ein 2. Script mit ähnlicher Aufgabe zu basteln würde ich noch ein Tipp von euch benötigen...

Aufgabenstellung:

Bisher hat das Script z.B. ein Ordner "Backup20170205" heruntergeladen, dort drin waren die rar Dateien...

Nun möchte ich aber den Download eine ebene höher Starten. Also den ganzen Ordner der Backups laden. Dadurch kommt noch eine Ordner ebene hinzu die sich auch ändert. Würde etwas so aussehen:

System1/BackupSystem1-20170502
/BackupSystem1-20170503
/BackupSystem1-20170504
System2/BackupSystem2-20170501
/BackupSystem2-20170505

Es würde also genau so auf der Platte laden.

Lasse ich das bisherige Script drauf los so bekomme ich Probleme mit dem Umbenennen und Verschieben da ich hier kein absoluten Pfad angeben kann. Das entpacken klappt soweit ich es sehe gut.

Ziel: Die entpackten *.mdb Dateien sollen im "$Zielverzeichnis" erscheinen

Wer eine idee dazu?


EDIT: So sieht das bei mir aktuell aus:

Habe versucht mit absoluten Pfaden zu Arbeiten, und überhaupt zu sehen was passiert habe ich das mal manuell versucht.

mein Aufruf:
Code:
mv /home/massaguana/System1/BackupSystem1-20170502/*.mdb "${NEW}".mdb

als Fehlermeldung erhalte ich:
Code:
mv: der Aufruf von stat für „/home/massaguana/System1/BackupSystem1-20170502/*.mdb“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden

Ich verstehe nicht worauf sich die Meldung "Datei oder Verzeichnis nicht gefunden" bezieht?

daher habe ich folgendes versucht:

Code:
mv /home/massaguana/System1/BackupSystem1-20170502/*.mdb /home/massaguana/System1/BackupSystem1-20170502/"${NEW}".mdb

Ergebnis:
Code:
mv: der Aufruf von stat für „/home/massaguana/System1/BackupSystem1-20170502/*.mdb“ ist nicht möglich: Datei oder Verzeichnis nicht gefunden

kapier ich nicht warum der das nicht findet...
 
Zuletzt bearbeitet:
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh