#1 Le 01/02/2020, à 11:31
- diesel
[RESOLU] Petite question recherche de fichiers
Bonjour,
J'ai un répertoire (par exemple /home/jean-marie/toto) contenant des fichiers.
Je cherche à écrire un test qui me donnerait un résultat vrai si un type de fichier (défini par son extension : *.odt par exemple) n'est pas présent dans le répertoire.
Nota : Dans le cas où le test renvoie un résultat faux, il peut y avoir plusieurs fichiers avec l'extension testée dans le répertoire.
J'ai essayé [ ! -f "/home/jean-marie/toto/"*.odt ] qui me donne le bon résultat mais il me sort une insulte me disant qu'il y a trop d'arguments s'il y a plusieurs fichiers avec la terminaison .odt dans le répertoire.
Comment faire ?
Merci d'avance
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 01/02/2020, à 13:05)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#2 Le 01/02/2020, à 11:50
- pingouinux
Re : [RESOLU] Petite question recherche de fichiers
Bonjour,
Par exemple
[ "$(find -name \*.odt)" ] && echo false || echo true
Ajouté :
Ou tout simplement
test ! "$(find -name \*.odt)"
Dernière modification par pingouinux (Le 01/02/2020, à 11:52)
Hors ligne
#3 Le 01/02/2020, à 12:02
- diesel
Re : [RESOLU] Petite question recherche de fichiers
Bonjour Pingouinux et merci pour ta réponse.
J'ai essayé find mais j'ai renoncé (à tort peut-être) quand je n'ai pas trouvé d'option de find inhibant la sortie et renvoyant juste un code de résultat (trouvé ou pas)
Puis, je me suis dit que je devrais y arriver avec bash seul.
Alors, depuis, j'ai bien une solution qui donne le résultat attendu
[ ! -f "/home/jean-marie/toto/"*.odt 2>/dev/null ]
mais je ne trouve pas ça propre.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#4 Le 01/02/2020, à 12:14
- pingouinux
Re : [RESOLU] Petite question recherche de fichiers
mais je ne trouve pas ça propre.
En effet. S'il y a plusieurs fichiers, ta commande ne retourne faux que parce qu'elle se termine en erreur
bash: [: too many arguments
Évidemment, comme tu caches le message d'erreur sous le tapis…
Hors ligne
#5 Le 01/02/2020, à 12:23
- Sciensous
Re : [RESOLU] Petite question recherche de fichiers
je te propose:
[ $(/bin/ls "/home/jean-marie/toto/*.odt" |wc -l) -eq 1 ] && echo ok || echo KO
Dernière modification par Sciensous (Le 01/02/2020, à 12:24)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#6 Le 01/02/2020, à 12:49
- diesel
Re : [RESOLU] Petite question recherche de fichiers
@ Sciencious,
Je crains que tu te fasse écharper par nos gourous du script.
De plus, ça ne donne pas le résultat attendu puisque je veux un résultat vrai s'il n'y en a pas (0).
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 01/02/2020, à 12:52)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#7 Le 01/02/2020, à 12:59
- Sciensous
Re : [RESOLU] Petite question recherche de fichiers
ouais mais je ne suis pas un gourou
je croyais que tu voulais que ce soit vrai s'il n'ya qu'un seul odt !!
si c'est au moins 1, avec retour vrai/faux:
[ $(/bin/ls "/home/jean-marie/toto/*.odt" |wc -l) -ge 1 ] && echo 1 || echo 0
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#8 Le 01/02/2020, à 13:00
- Watael
Re : [RESOLU] Petite question recherche de fichiers
grrr.
s'il n'y a pas de sous-répertoires, simplement :
fileList=( "$rep"/*.odt )
((${#fileList[*]})) && echo "${#fileList[*]} fichier(s) présent(s)" || echo "aucun fichier présent"
ou alors, ajouter globstar...
Dernière modification par Watael (Le 01/02/2020, à 13:02)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#9 Le 01/02/2020, à 13:05
- diesel
Re : [RESOLU] Petite question recherche de fichiers
grrr.
s'il n'y a pas de sous-répertoires, simplement :
fileList=( "$rep"/*.odt ) ((${#fileList[*]})) && echo "${#fileList[*]} fichier(s) présent(s)" || echo "aucun fichier présent"
ou alors, ajouter globstar...
Évidement.
Merci Watael.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#10 Le 01/02/2020, à 13:09
- Sciensous
Re : [RESOLU] Petite question recherche de fichiers
je préfère quand même un
/bin/ls "/home/jean-marie/toto/*.odt" 2>/dev/null |wc -l
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#11 Le 01/02/2020, à 13:44
- diesel
Re : [RESOLU] Petite question recherche de fichiers
grrr.
s'il n'y a pas de sous-répertoires, simplement :
fileList=( "$rep"/*.odt ) ((${#fileList[*]})) && echo "${#fileList[*]} fichier(s) présent(s)" || echo "aucun fichier présent"
ou alors, ajouter globstar...
Ça commençait bien, mais ça ne marche pas.
En effet, s'il n'y a pas de fichier .odt dans le répertoire, la variable filelist est une variables simple (pas un tableau) qui contient le développement de $rep suivi de "/*.odt" et donc
((${#fileList[*]}))
donne 1 et pas 0.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#12 Le 01/02/2020, à 14:30
- diesel
Re : [RESOLU] Petite question recherche de fichiers
Bon, finalement, j'ai mis en œuvre la solution proposée par Pingouinux.
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#13 Le 01/02/2020, à 15:01
- Watael
Re : [RESOLU] Petite question recherche de fichiers
ah! "j'ai omis les œufs de caille" !
shopt -s nullglob
deux choses Sciensous :
- l'astérisque n'est pas développé entre guillemets; ls (grrr) va retourner une erreur, mais tu ne la verras pas
- ici, ça pourrait fonctionner (je ne suis même pas certain de la pertinence de wc, puisqu'on cherche un résultat booléen (Vrai/Faux)), mais pourquoi "externaliser" ce que peut faire le shell ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 01/02/2020, à 15:12
- Sciensous
Re : [RESOLU] Petite question recherche de fichiers
merci pour ces remarques Watel.
mais pourquoi "externaliser" ce que peut faire le shell ?
parce que je ne suis pas un gourou du script (post 6)
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#15 Le 01/02/2020, à 17:41
- diesel
Re : [RESOLU] Petite question recherche de fichiers
ah! "j'ai omis les œufs de caille" !
"C'est une catastrophe..."
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 01/02/2020, à 17:41)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#16 Le 01/02/2020, à 18:18
- melixgaro
Re : [RESOLU] Petite question recherche de fichiers
Watael a écrit :ah! "j'ai omis les œufs de caille" !
"C'est une catastrophe..."
Amicalement.
Jean-Marie
Faut-il aussi réciter la formule magique lorsqu'on utilise la commande dans un terminal ?
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#17 Le 01/02/2020, à 18:39
- diesel
Re : [RESOLU] Petite question recherche de fichiers
Faut-il aussi réciter la formule magique lorsqu'on utilise la commande dans un terminal ?
C'est même indispensable !
Amicalement.
Jean-Marie
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne