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.
Avec la fonction telle que
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Un exemple d'exécution qui se passe bien lorsque le fichier n'est pas dans l'archive.
Un exemple qui plante avec un fichier présent dans l'archive
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2./extraireFichierTar.sh test.tar tyty.txt Aucun fichier correspondant extrait
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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é![]()
Partager