Comment décompresser et décompresser les fichiers de manière récursive ?

J'ai un fichier important qui contient des zips et aussi des rars avec zip ainsi que des documents rar situés dans une boîte linux.

J'ai généralement besoin d'un script ou d'une doublure qui recherchera de manière récursive dans les répertoires, décompressera et décompressera tout type de rar ou de zip qu'il localise.

2
2022-07-25 17:25:56
La source Partager
Réponses: 4

Voici la solution de quelqu'un à cela avec un script shell.

Vraisemblablement, Linux n'a pas d'alternative de décompression récursive : (

2
2022-07-25 19:46:48
La source

Le seul moyen auquel je peux penser pour cela est de boucler plusieurs fois avec découvrir et exécuter un manuscrit qui supprime les documents après qu'ils ont été correctement décompressés. Il devra parcourir les sous-répertoires plusieurs fois afin qu'il ne soit pas particulièrement fiable. (noms de fichiers anticipés en fort en haut)

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

déballeur

#!/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

fais

chmod u+x recursive_unpack
chmod u+x unpacker

appelez-le avec ./recursive_unpack "/my/directory/containing/my/files"

  • recursive_unpack attend un déballeur dans exactement le même répertoire
  • unrar et aussi unzip doivent être montés
  • s'il ne peut pas localiser le site du répertoire, il se terminera avec une erreur
  • ne supprimez pas les messages d'écho dans unpacker, ils servent à rechercher la visibilité des données à décompresser pour terminer la boucle
1
2022-07-25 19:46:48
La source

Une doublure rapide, n'inspecte pas si une archive a effectivement été extraite :

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

Peut-être que dtrx () fera l'affaire, bien que je ne sois pas sûr qu'il gère le type rar.

0
2022-07-25 19:35:33
La source