Désarchiver un fichier dans une archive
Bonjour/Bonsoir
Je possède une archive
test.tar
contenant un dossier dos/
et des fichiers dos/toto.txt et dos/tata.txt
A noter que c'est un simple test j'aurais pu en mettre plus et dans d'autres dispositions.
Le programme principal prend en entrée une archive et au moins un nom de fichiers.
Si le code de retour de la fonction est 0; on incrémentera de 1 le nombre de fichier extrait.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| if [ $# -lt 2 ]
then
echo "Usage $0 archive.tar fichier.txt [...]";
exit 1;
fi
nbExtrait=0;
archive=$1;
debut=0;
for i in `tar -tf $1`
do
if [ $debut -eq 0 ]
then
shift 1;
debut=1;
fi
for k in $*
do
if [ -d $k ]
then
echo "Usage $0 archive.tar fichier.txt [...]";
echo "$k n'est pas un fichier accessible;"
exit 2;
fi
if [ `detarre $archive $k` -eq 0 ]
then
echo essai; #trace
estDansTar $archive $k;
nbExtrait=`expr $nbExtrait + 1`;
fi
done
done
if [ $nbExtrait -eq 0 ]
then
echo "Aucun fichier correspondant extrait";
exit 3;
fi
exit 0; |
Avec la fonction telle que
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
detarre() {
if [ $# -ne 2 ]
then
echo 1;
return 1;
fi
for i in `tar -tf $1`
do
if [ -d $2 ]
then
echo 2;
return 2;
fi
if [ `basename $i` = $2 ]
then
tar -xf $1 $2;
echo 0;
return 0;
fi
done
echo 3;
return 3;
} |
La fonction regarde si le fichier qu'on lui passe en argument est dans l'archive; et si oui elle doit le "désarchiver" et c'est là que ça semble coincer.
Un exemple d'exécution qui se passe bien lorsque le fichier n'est pas dans l'archive.
Code:
1 2
| ./extraireFichierTar.sh test.tar tyty.txt
Aucun fichier correspondant extrait |
Un exemple qui plante avec un fichier présent dans l'archive
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
tar: toto.txt : non trouvé dans l'archive
tar: Arrêt avec code d'échec à cause des erreurs précédentes
essai
tar: toto.txt : non trouvé dans l'archive
tar: Arrêt avec code d'échec à cause des erreurs précédentes
0
tar: toto.txt : non trouvé dans l'archive
tar: Arrêt avec code d'échec à cause des erreurs précédentes
essai
tar: toto.txt : non trouvé dans l'archive
tar: Arrêt avec code d'échec à cause des erreurs précédentes
0
tar: toto.txt : non trouvé dans l'archive
tar: Arrêt avec code d'échec à cause des erreurs précédentes
essai
tar: toto.txt : non trouvé dans l'archive
tar: Arrêt avec code d'échec à cause des erreurs précédentes
0 |
Voilà le tout un peu mieux résumé :)