Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 23/03/2013, à 19:05

noyan

[Script]décompresser plusieurs fichiers dans le même répertoire

Bonsoir,

je propose un script qui permet de décompresser plusieurs fichiers rar, zip, et 7z dans le même répertoire. Le script gère les fichiers compressés avec mots de passe.

#!/bin/bash

if [ $1 ]
  then pass="-p$1 "
  else pass=""
fi

if ls *.rar
  then echo "décompression des fichiers rar"
  for f in *.rar;do unrar x -o- $pass "$f";done
fi

if ls *.zip
  then echo "décompression des fichiers zip"
  for f in *.zip;do unzip -n $pass "$f";done
fi

if ls *.7z
  then echo "décompression des fichiers 7z"
  for f in *.7z;do 7z x $pass "$f";done
fi

echo -e "Voulez-vous supprimer les fichiers compressés [O/N] ?"
read REP

case $REP in
             N|n)
                   echo -e " Aucun fichier n'a été supprimé "
                   exit
             ;;
             O|o|*)
                    mv *.rar /home/${USER}/.local/share/Trash/files/
                    mv *.zip /home/${USER}/.local/share/Trash/files/
                    mv *.7z /home/${USER}/.local/share/Trash/files/

                    echo -e " Les fichiers ont été mis dans la corbeille "
                    exit
             ;;
esac

Je l'ai appelé décomp et je l'ai placé dans /bin/decomp

l'utilisation est simple: decomp + "Entrée" ou decomp motdepasse + "Entrée"

Il est forcément possible d'ajoûter d'autres extensions pour adapter le script au besoin de chacun.

Hors ligne

#2 Le 24/03/2013, à 09:11

aglesia

Re : [Script]décompresser plusieurs fichiers dans le même répertoire

Merci pour ce script smile


L'erreur est humaine...
Si votre PC plante, c'est qu'il est humain :D

Hors ligne

#3 Le 10/04/2013, à 19:51

Cyrille_tux

Re : [Script]décompresser plusieurs fichiers dans le même répertoire

Le script ne gère pas les erreurs :

if ls *.rar
>   then echo "décompression des fichiers rar"
>   for f in *.rar;do unrar x -o- $pass "$f";done
> fi
ls: impossible d'accéder à *.rar: Aucun fichier ou dossier de ce type

Il est bien d'indiquer/de forcer une valeur pour la commande "exit".
=> exit 0 par exemple quand c'est OK
=> exit 1 par exemple quand c'est KO

On peut remplacer :

 mv *.rar /home/${USER}/.local/share/Trash/files/
 mv *.zip /home/${USER}/.local/share/Trash/files/
 mv *.7z /home/${USER}/.local/share/Trash/files/

Par :

mv *.{rar,zip,7z} /home/${USER}/.local/share/Trash/files/ > /dev/null 2>&1

Hors ligne

#4 Le 25/08/2013, à 15:13

noyan

Re : [Script]décompresser plusieurs fichiers dans le même répertoire

Bonjour à tous,

En suivant les conseils de Cyrille, je propose une version 2 à mon script.

J'ai éliminé les messages d'erreurs
- ajouté la possibilité de décompresser en conservant l'arboressance en tapant decomp -p
- ajouté une aide en tapant decomp -h


#!/bin/bash
#Decomp by Noyan - version 2.0 - 25 Août 2013


version="Decomp by Noyan - version 2.0 - 25 Août 2013"
aide1="\033[1mdecomp\033[0m \t\t\t\tdécompresse les fichiers sans tenir compte l'arboressance des répertoires"
aide2="\033[1mdecomp motdepasse\033[0m \t\tdécompresse les fichiers suivant le mot de passe"
aide3="\033[1mdecomp -p\033[0m \t\t\tdecompresse les fichiers en respectant l'arboressance des répertoires"
aide4="\033[1mdecomp motdepasse -p\033[0m \t\tdecompresse les fichiers suivant le mot de passe, en respectant l'arboressance des répertoires"
aide5="\033[1mdecomp -v\033[0m \t\t\tAffiche la version du fichier"
aide6="\033[1mdecomp -h\033[0m \t\t\tAffiche cette page d'aide"



extract_path=""
pass=""
extract_rar="e"
extract_zip="-j"
extract_7z="e"
argument1=""
argument2=""
fichier=""



# Analyse des options
#--------------------
#
# options $1


if [ $1 ]
  then argument1=$1
fi

if [ $2 ]
  then argument2=$2
fi



    if [ $argument1 ] && test $argument1 = "-p"
      then argument2=$argument1  
    fi

    if [ $argument1 ] && test $argument1 = "-v"
      then echo $version
	    exit 1
    fi    
    
    if [ $argument1 ] && test $argument1 = "-h"
      then
	echo -e $aide1
	echo -e $aide2
	echo -e $aide3
	echo -e $aide4
	echo -e $aide5
	echo -e $aide6
	exit 1
    fi    
    
    if [ $argument1 ] && test $argument1 != "-p"
      then pass="-p$1 "
    fi

#
# options $2


      if [ $argument2 ] && test $argument2 = "-p" 

	then 	extract_rar="x"
	      extract_zip="-n"
	      extract_7z="x"
      fi

      
# decompressions


if [ -f *.rar ];
  then
    echo "Recherche de fichiers rar"
    for f in *.rar;do unrar $extract_rar -o- $pass "$f";done
  else
    fichier=$((++fichier))
fi


if [ -f *.zip ];
  then
    echo "Recherche de fichiers zip"
    for f in *.zip;do unzip $extract_zip $pass "$f";done
  else
    fichier=$((++fichier))
fi

if [ -f *.7z ];
  then
    echo "Recherche de fichiers 7z"
    for f in *.7z;do 7z $extract_7z $pass "$f";done
  else
    fichier=$((++fichier))
fi

if test $fichier = 3
  then 
    echo "aucun fichier compressé n'a été trouvé"
    exit 1
  else
  

# Supression des fichiers compressés

    echo -e "Voulez-vous supprimer les fichiers compressés [O/N] ?"
    read REP

    case $REP in
		N|n)
		      echo -e " Aucun fichier n'a été supprimé "
		      exit 1
		;;
		O|o|*)

			mv *.{rar,zip,7z} /home/${USER}/.local/share/Trash/files/ > /dev/null 2>&1
			echo -e " Les fichiers ont été mis dans la corbeille "
			exit 0
		;;
    esac
fi

Enfin le script doit être placé dans /bin/ pour pouvoir l'utiliser dans n'importe quel répertoire.

Noyan

Hors ligne

#5 Le 25/08/2013, à 17:01

ar barzh paour

Re : [Script]décompresser plusieurs fichiers dans le même répertoire

# Supression des fichiers compressés
    echo -e "Voulez-vous supprimer les fichiers compressés [O/N] ?"
    read REP
    case $REP in
		N|n)
		      echo -e " Aucun fichier n'a été supprimé "
		      exit 1
		;;
		O|o|*)
			mv *.{rar,zip,7z} /home/${USER}/.local/share/Trash/files/ > /dev/null 2>&1
			echo -e " Les fichiers ont été mis dans la corbeille "
			exit 0
		;;
    esac


pour moi c'est pas très bon, si on répond autre chose que n|N , les fichiers seront supprimés

utilise plutôt quelque chose comme ça

while :
do
    echo -e "Voulez-vous supprimer les fichiers compressés [O/N] ?"
    read REP
    case $REP in
		N|n)
		      echo -e " Aucun fichier n'a été supprimé "
		      exit 1
		;;
		O|o)
			mv *.{rar,zip,7z} /home/${USER}/.local/share/Trash/files/ > /dev/null 2>&1
			echo -e " Les fichiers ont été mis dans la corbeille "
			exit 0
		;;
		*)
			echo -e " Répondre par o ou O ou n ou N "
		;;
    esac
done

PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram W10-PRO( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#6 Le 25/08/2013, à 17:53

noyan

Re : [Script]décompresser plusieurs fichiers dans le même répertoire

Merci ar barzh

du coup j'ai intégré la modif que tu m'as conseillé.

j'ai également revu les conditions de recherche de fichiers rar, zip ou 7z


#!/bin/bash
#Decomp by Noyan - version 2.1 - 25 Août 2013


version="Decomp by Noyan - version 2.1 - 25 Août 2013"
aide1="\033[1mdecomp\033[0m \t\t\t\tdécompresse les fichiers sans tenir compte l'arboressance des répertoires"
aide2="\033[1mdecomp motdepasse\033[0m \t\tdécompresse les fichiers suivant le mot de passe"
aide3="\033[1mdecomp -p\033[0m \t\t\tdecompresse les fichiers en respectant l'arboressance des répertoires"
aide4="\033[1mdecomp motdepasse -p\033[0m \t\tdecompresse les fichiers suivant le mot de passe, en respectant l'arboressance des répertoires"
aide5="\033[1mdecomp -v\033[0m \t\t\tAffiche la version du fichier"
aide6="\033[1mdecomp -h\033[0m \t\t\tAffiche cette page d'aide"



extract_path=""
pass=""
extract_rar="e"
extract_zip="-j"
extract_7z="e"
argument1=""
argument2=""
fichier=""



# Analyse des options
#--------------------
#
# options $1


if [ $1 ]
  then argument1=$1
fi

if [ $2 ]
  then argument2=$2
fi



    if [ $argument1 ] && test $argument1 = "-p"
      then argument2=$argument1  
    fi

    if [ $argument1 ] && test $argument1 = "-v"
      then echo $version
	    exit 1
    fi    
    
    if [ $argument1 ] && test $argument1 = "-h"
      then
	echo -e $aide1
	echo -e $aide2
	echo -e $aide3
	echo -e $aide4
	echo -e $aide5
	echo -e $aide6
	exit 1
    fi    
    
    if [ $argument1 ] && test $argument1 != "-p"
      then pass="-p$1 "
    fi

#
# options $2


      if [ $argument2 ] && test $argument2 = "-p" 

	then 	extract_rar="x"
	      extract_zip="-n"
	      extract_7z="x"
      fi

      
# decompressions


if ls *.rar > /dev/null 2>&1 ;
  then
    echo "Recherche de fichiers rar"
    for f in *.rar;do unrar $extract_rar -o- $pass "$f";done
  else
    fichier=$((++fichier))
fi


if ls *.zip > /dev/null 2>&1 ;
  then
    echo "Recherche de fichiers zip"
    for f in *.zip;do unzip $extract_zip $pass "$f";done
  else
    fichier=$((++fichier))
fi

if ls *.7z > /dev/null 2>&1 ;
  then
    echo "Recherche de fichiers 7z"
    for f in *.7z;do 7z $extract_7z $pass "$f";done
  else
    fichier=$((++fichier))
fi

if test $fichier = 3
  then 
    echo "aucun fichier compressé n'a été trouvé"
    exit 1
  else
  

  # Supression des fichiers compressés

  while :
  do
      echo -e "Voulez-vous supprimer les fichiers compressés [O/N] ?"
      read REP
      case $REP in
		  N|n)
			echo -e " Aucun fichier n'a été supprimé "
			exit 1
		  ;;
		  O|o)
			  mv *.{rar,zip,7z} /home/${USER}/.local/share/Trash/files/ > /dev/null 2>&1
			  echo -e " Les fichiers ont été mis dans la corbeille "
			  exit 0
		  ;;
		  *)
			  echo -e " Répondre par o ou O ou n ou N "
		  ;;
      esac
  done

fi

Dernière modification par noyan (Le 25/08/2013, à 17:54)

Hors ligne

#7 Le 09/05/2022, à 09:34

OpenPat

Re : [Script]décompresser plusieurs fichiers dans le même répertoire

Excellent !
Je sais que c'est plutôt un déterrage de sujet.
Cependant ce script est si efficace qu'il mérite bien d'être remis à l'affiche...

Hors ligne