Écrire script find.sh qui parcourt les repertoires et sous-repertoire
Fermé
limbaon9
Messages postés
42
Date d'inscription
lundi 14 octobre 2019
Statut
Membre
Dernière intervention
12 mars 2022
-
Modifié le 16 avril 2020 à 13:19
Cobalt222S Messages postés 7 Date d'inscription vendredi 14 décembre 2018 Statut Membre Dernière intervention 1 juin 2020 - 7 mai 2020 à 11:20
Cobalt222S Messages postés 7 Date d'inscription vendredi 14 décembre 2018 Statut Membre Dernière intervention 1 juin 2020 - 7 mai 2020 à 11:20
A voir également:
- Find_sh
- Script vidéo youtube - Guide
- Répertoire téléphonique gratuit - Télécharger - Bureautique
- Ecrire en gras sur whatsapp - Guide
- Application pour écrire les chiffre en lettre - Télécharger - Outils professionnels
- Ecrire en miroir - Guide
5 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
16 avril 2020 à 17:02
16 avril 2020 à 17:02
Salut,
J'avoue ne pas avoir bien saisi toute la finalité de ce que tu veux faire ;-(
Sans compter quelques petites erreurs ou méthodes pas très orthodoxes ;-\
Déjà, nommer une fonction avec le nom d'une commande existante c'est pas génial, d'autant plus que tu lui as donné presque la même façon de lui passer des ooptions, c'est déconcertant quand on lit ton code ;-\
À faire ce que tu veux, est-ce que l'appel de la commande
J'avoue ne pas avoir bien saisi toute la finalité de ce que tu veux faire ;-(
Sans compter quelques petites erreurs ou méthodes pas très orthodoxes ;-\
Déjà, nommer une fonction avec le nom d'une commande existante c'est pas génial, d'autant plus que tu lui as donné presque la même façon de lui passer des ooptions, c'est déconcertant quand on lit ton code ;-\
if [$# -lt 2]Il faut des espaces de part et d'autre des crochets
if [ $# -lt 2 ].
$0 "$file"Rappeler le script lui même, non plus n'est pas l'idéal, du moins pour la façon dont tu t'en sers ;-\
À faire ce que tu veux, est-ce que l'appel de la commande
find(la vraie, pas ta fonction) ne suffit pas en elle même pour ce que j'ai compris de ton besoin ?
limbaon9
Messages postés
42
Date d'inscription
lundi 14 octobre 2019
Statut
Membre
Dernière intervention
12 mars 2022
16 avril 2020 à 17:15
16 avril 2020 à 17:15
Merci pour l'info sur les espaces dans les crochets. Et oui l'appel de la commande find pourrait bien suffir mais comme précisé sur le sujet c'est un script shell et une fonction qui recherche un fichier un répertoire à partir d’un répertoire donné en argument et tout ça avec un find. Et à la fin je dois m'attendre à un résultat du genre :
>find.sh . f1
./f1./src/f1
./tmp/f1
>echo $?
0
>find.sh . fichierQuiNExitePas
>echo $?
1
Peut être que j'ai pas été clair sur la finalité de ce que doit faire ce script :-(
>find.sh . f1
./f1./src/f1
./tmp/f1
>echo $?
0
>find.sh . fichierQuiNExitePas
>echo $?
1
Peut être que j'ai pas été clair sur la finalité de ce que doit faire ce script :-(
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 419
16 avril 2020 à 17:28
16 avril 2020 à 17:28
et tout ça avec un findOn parle bien de la commande
/usr/bin/findlà ?
Donc ta fonction doit/peut appeler la commande
findet ce qui importe c'est les tests à faire avant concernant le nombre de paramètres d'une part et de l'autre déterminer si c'est un fichier qu'il faut chercher ou un fichier dans un répertoire précis. J'ai bon ?
limbaon9
Messages postés
42
Date d'inscription
lundi 14 octobre 2019
Statut
Membre
Dernière intervention
12 mars 2022
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
16 avril 2020 à 20:18
16 avril 2020 à 20:18
Oui exactement ma fonction peut appeler la commande find et faut juste faire des tests sur les nombres d'arguments et si c'est un fichier ou un répertoire. Et désolé d'avoir répondu aussi tardivement ^^.
limbaon9
Messages postés
42
Date d'inscription
lundi 14 octobre 2019
Statut
Membre
Dernière intervention
12 mars 2022
17 avril 2020 à 11:33
17 avril 2020 à 11:33
Sachant aussi que pour appeler le scrpit on effectue la commande suivante :
source $0 $type (fichier ou répertoire) $repertoire $nom.
source $0 $type (fichier ou répertoire) $repertoire $nom.
Cobalt222S
Messages postés
7
Date d'inscription
vendredi 14 décembre 2018
Statut
Membre
Dernière intervention
1 juin 2020
1 mai 2020 à 07:06
1 mai 2020 à 07:06
salut,
cet exercice porte sur la récursivité.
àmha, il ne faut pas utiliser find qui est récursif par défaut (on peut la bloquer, mais alors quel intérêt ?), ni utiliser de fonction puisque la récursivité c'est le script qui doit s'appeler lui-même pour effectuer la récusivité.
on reprend :
le script reçoit 2 (chemin nomFic) ou 3 arguments (type (combien sont prédéfinis ?) chemin nomRep), sinon on sort avec une erreur.
en pseudo code:
si nbArg est inférieur à 2
alors quitter avec erreur
autrement
si nbArg vaut 2
alors
chemin vaut premier argument
nomFic vaut deuxième argument
pour fichierOuRepertoire dans chemin
si fichierOuRepertoire est un fichier ET fichierOuRepertoire vaut chemin/nomFic
alors afficher fichierOuRepertoire
autrement
si fichierOuRepertoire est un repertoire
alors exécuter script avec fichierOuRepertoire nomFic
finSi
autrement (nbArg vaut 3)
pour repertoire dans chemin (en bash on peut limiter chemin aux seuls répertoire)
si repertoire vaut chemin/nomRep
alors
afficher repertoire
exécuter script type repertoire nomRep
finSI
finSI
ce n'est pas ni vérifier, ni tester : il y a longtemps que je n'ai pas fait de récursivité. :(
cet exercice porte sur la récursivité.
àmha, il ne faut pas utiliser find qui est récursif par défaut (on peut la bloquer, mais alors quel intérêt ?), ni utiliser de fonction puisque la récursivité c'est le script qui doit s'appeler lui-même pour effectuer la récusivité.
on reprend :
le script reçoit 2 (chemin nomFic) ou 3 arguments (type (combien sont prédéfinis ?) chemin nomRep), sinon on sort avec une erreur.
en pseudo code:
si nbArg est inférieur à 2
alors quitter avec erreur
autrement
si nbArg vaut 2
alors
chemin vaut premier argument
nomFic vaut deuxième argument
pour fichierOuRepertoire dans chemin
si fichierOuRepertoire est un fichier ET fichierOuRepertoire vaut chemin/nomFic
alors afficher fichierOuRepertoire
autrement
si fichierOuRepertoire est un repertoire
alors exécuter script avec fichierOuRepertoire nomFic
finSi
autrement (nbArg vaut 3)
pour repertoire dans chemin (en bash on peut limiter chemin aux seuls répertoire)
si repertoire vaut chemin/nomRep
alors
afficher repertoire
exécuter script type repertoire nomRep
finSI
finSI
ce n'est pas ni vérifier, ni tester : il y a longtemps que je n'ai pas fait de récursivité. :(
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
loftyramitsu
Messages postés
37
Date d'inscription
vendredi 27 mars 2020
Statut
Membre
Dernière intervention
29 juin 2020
1
6 mai 2020 à 19:18
6 mai 2020 à 19:18
Et un petit grep qui prendrait les résultats du find et qui filtre les données ?
Cobalt222S
Messages postés
7
Date d'inscription
vendredi 14 décembre 2018
Statut
Membre
Dernière intervention
1 juin 2020
7 mai 2020 à 11:20
7 mai 2020 à 11:20
cet exercice porte sur la récursivité.
le résultat compte moins que la démonstration.
le résultat compte moins que la démonstration.