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 19/09/2019, à 21:20

Klemens

Recheche avec ls

j'ai appris qu'avec ls on pouvait rechercher des fichier par nom / extension

ls ?a* on cherche un nom avec un a en 2 eme place

Mais par exemple je cherche un fichier a 6 lettres et 1 chiffre par exemple 5
comment faire pour le trouvé peut importe ou ce trouve le 5 ?
Merci de votre aide

Hors ligne

#2 Le 19/09/2019, à 21:41

pingouinux

Re : Recheche avec ls

Bonsoir,
Ça ne répond pas exactement à la question, mais voici déjà comment trouver les fichiers dont le nom a 7 caractères dont un 5 :

for i in *5*;do [ $(wc -m <<<"$i") = 8 ] && echo "$i"; done

Édité :
Et pour limiter les autres caractères aux lettres minuscules :

for i in *5*;do grep -q '^[a-z]*5[a-z]*$' <<<"$i" && [ $(wc -c <<<"$i") = 8 ] && echo "$i"; done

Dernière modification par pingouinux (Le 19/09/2019, à 21:51)

Hors ligne

#3 Le 19/09/2019, à 22:06

Postmortem

Re : Recheche avec ls

Salut,
Petite précision, ls ne recherche pas. ls ne fait qu'afficher les fichiers qu'on lui donne en argument.
Pour t'en convaincre, regarde ceci :

$ ls *.txt
tata.txt  toto.txt
$ echo *.txt
tata.txt toto.txt
$ 

C'est le shell qui remplace *.txt par les fichiers correspondant avant l'exécution de ls ou echo.


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#4 Le 19/09/2019, à 23:07

kamaris

Re : Recheche avec ls

Une proposition en bash :

shopt -s extglob
for f in *([a-zA-Z])5*([a-zA-Z]); do test "${#f}" == 7 && ls "$f"; done

Hors ligne

#5 Le 19/09/2019, à 23:58

Watael

Re : Recheche avec ls

en bash :

rgx='^[a-Z5]{7}$'
for f in ./*; do [[ ${f##*/} =~ $rgx ]] && stat "$f"; done

?


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 20/09/2019, à 00:21

jamesbad000

Re : Recheche avec ls

Bonsoir,

S'il s'agit vraiment de chercher (on ne sait pas dans quel sous répertoire se trouve le fichier). Utiliser find me semble approprié.

find . | egrep '/[a-zA-Z0-9]{7}$' | egrep '/[a-zA-Z]*5[a-zA-Z]*$'

Dernière modification par jamesbad000 (Le 20/09/2019, à 00:22)


L'espace et le temps sont les modes par lesquels nous pensons, et non les conditions dans lesquelles nous vivons. (Signé Albert)

Hors ligne

#7 Le 20/09/2019, à 00:23

kamaris

Re : Recheche avec ls

Watael a écrit :

en bash :

rgx='^[a-Z5]{7}$'
for f in ./*; do [[ ${f##*/} =~ $rgx ]] && stat "$f"; done

?

Là tu sors du cadre de l'énoncé : les fichiers correspondant à la regex peuvent contenir zéro ou plusieurs 5.

Dernière modification par kamaris (Le 20/09/2019, à 00:24)

Hors ligne

#8 Le 20/09/2019, à 01:10

Watael

Re : Recheche avec ls

hula hup

[[ $var =~ $rgx && $var =~ 5 ]]

barbatruc.

smile


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#9 Le 20/09/2019, à 01:41

Postmortem

Re : Recheche avec ls

@Watael : pas bon non plus, là tu acceptes qu'il y ait plusieurs 5

Dernière modification par Postmortem (Le 20/09/2019, à 01:42)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#10 Le 20/09/2019, à 02:11

Watael

Re : Recheche avec ls

grrr.

avec du ruban adhésif ?

$ rgx='^[a-Z5]{7}$' # 7 caractères (de a à Z et/ou 5)
$ for f in ./*
do
   filename=${f##*/}; [[ $filename =~ $rgx && $(x=${BASH_REMATCH//5}; echo ${#x}) -eq 6 ]] && stat "$f" # en enlevant tous les 5, la chaîne restant doit comporter 6 caractères
done

ça ne me plaît pas que ce ne soit pas plus direct.

Dernière modification par Watael (Le 20/09/2019, à 02:18)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#11 Le 20/09/2019, à 10:20

kamaris

Re : Recheche avec ls

Il y a ça sinon :

rgx1='^[a-Z5]{7}$'; rgx2='^[^5]*5[^5]*$'
for f in ./*; do filename=${f##*/}; [[ $filename =~ $rgx1 && $filename =~ $rgx2 ]] && stat "$f"; done

Hors ligne

#12 Le 20/09/2019, à 10:24

Postmortem

Re : Recheche avec ls

Sans boucle, en bash :

shopt -s extglob
GLOBIGNORE=*5*5*:+([a-z])
ls $(printf '[a-z5]%.s' {1..7})

Edit :
Si on est en LANG=fr_FR.UTF-8, pour être certain de n'avoir que les minuscules, ça serait plutôt :

shopt -s extglob
GLOBIGNORE=*5*5*:+([[:lower:]])
ls $(printf '[[:lower:]5]%.s' {1..7})

Dernière modification par Postmortem (Le 20/09/2019, à 11:40)


Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »

Hors ligne

#13 Le 20/09/2019, à 11:03

kamaris

Re : Recheche avec ls

Pas mal… smile

Hors ligne

#14 Le 20/09/2019, à 16:53

Watael

Re : Recheche avec ls

+1


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne