Wie kann man Dateien rekursiv entpacken und entpacken?

Ich habe eine Menge Daten, die Zips und RARs mit Zip sowie RAR-Dokumente enthalten, die sich auf einer Linux-Box befinden.

Ich benötige im Allgemeinen ein Manuskript oder einen Einzeiler, der rekursiv die Verzeichnisse durchsucht und auch jede Art von RAR- oder Zip-Datei entpackt und entpackt, die er findet.

2
2022-07-25 17:25:56
Quelle Aktie
Antworten: 4

Hier ist jemandes Dienst dazu mit einem Shell-Skript.

Es scheint, dass Linux keine rekursive Entpackoption hat: (

2
2022-07-25 19:46:48
Quelle

Die einzige Methode, die mir dazu einfällt, besteht darin, mit Discover mehrere Schleifen zu durchlaufen und ein Skript auszuführen, das die Daten löscht, nachdem sie korrekt entpackt wurden. Es muss mehrmals Unterverzeichnisse durchlaufen, daher ist es nicht gerade effektiv. (erwartete Dateinamen stark oben)

recursive_unpack

#!/bin/bash
if [ -d "$1" ]; then
   STARTDIR="$1"
else
   echo "starting dir not found: $1"
   exit
fi


COUNTER=1
while [ $COUNTER -gt 0 ]; do
   COUNTER=`find "$STARTDIR" -type f \( -iname '*.zip' -o -iname '*.rar' \) -exec ./unpacker \{\} \; | wc -l`
done

Entpacker

#!/bin/bash
BASENAME=`basename "$1"`
BASEDIR=`dirname "$1"`

cd "$BASEDIR"
EXT=`echo "$BASENAME" | awk -F . '{print $NF}'`

if [ "$EXT" = "zip" ]; then
  unzip -qq "$BASENAME"
  if [ $? -eq 0 ]; then
     echo "zip unpacked: $1"
     rm "$BASENAME"
  fi
fi

if [ "$EXT" = "rar" ]; then
  unrar e -y -c- -inul "$BASENAME"
  if [ $? -eq 0 ]; then
     echo "rar unpacked: $1"
     rm "$BASENAME"
  fi
fi

tun

chmod u+x recursive_unpack
chmod u+x unpacker

Rufen Sie es mit ./recursive_unpack "/my/directory/containing/my/files" auf

  • recursive_unpack erwartet Entpacker in derselben Verzeichnis-Site
  • unrar und unzip müssen gemountet werden
  • Wenn es das Verzeichnis nicht finden kann, wird es mit einem Fehler beendet
  • Entfernen Sie nicht die ähnlichen Meldungen im Entpacker, sie werden verwendet, um zu prüfen, ob Dokumente vorhanden sind, die entpackt werden müssen, um die Schleife zu beenden
1
2022-07-25 19:46:48
Quelle

Eine schnelle Einzeiler, prüft nicht, ob ein Archiv tatsächlich schon entpackt wurde:

$ find . -name '*.rar' -execdir unrar e '{}' + && find . -name '*.zip' -execdir unzip -tq '{}' +
1
2022-07-25 19:46:48
Quelle

Vielleicht reicht dtrx (), obwohl ich nicht sicher bin, ob es mit rar-Typen umgeht.

0
2022-07-25 19:35:33
Quelle