#1 Le 20/01/2018, à 16:45
- qolepam
tri et recherche spécifique de noms de fichiers
bonjour,
Je travaille sous Ubuntu 16.04 LTS et une recherche ou tri classique par nom se fait dans le terminal avec locate où on peut utiliser les regex ou find
Soit une petite liste de fichiers dont les noms sont par exemple:
azerty
paupol
Gargantua
Quelles lignes de commande pour:
1) de trier dans cette zone par exemple comme ceci:
-par ordre croissant alphanumérique des dernières lettres des noms de dossiers et fichiers ce qui donnerait:
Gargantua
paupol
azerty
-par ordre croissant alphanumérique de la lettre à la position x[1-n](n dernier):si x=3 cela donnerait:
azerty
Gargantua
paupol
si x=n cela donnerait:
Gargantua
paupol
azerty
On pourrait imaginer d'autres exemples
2)de faire des recherches particulières comme:
-rechercher les noms de fichiers dossiers qui se terminent par un caractère précis
-rechercher les noms de fichiers dossiers dont le caractère à la position x est un caractère précis
merci de votre aide
Hors ligne
#2 Le 20/01/2018, à 17:20
- Watael
Re : tri et recherche spécifique de noms de fichiers
Je travaille sous Ubuntu
et ça va ? ça protège bien de la pluie ?
pour le tri : extraire la lettre-critère, passer le couple lettre/mot à sort, et couper le mot pour l'affichage.
pour la recherche : find.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 20/01/2018, à 17:23
- qolepam
Re : tri et recherche spécifique de noms de fichiers
un site illustrant des exemples de ce genre ?
Hors ligne
#4 Le 20/01/2018, à 17:24
- pingouinux
Re : tri et recherche spécifique de noms de fichiers
Bonjour,
$ cat liste
Gargantua
paupol
azerty
-par ordre croissant alphanumérique des dernières lettres des noms de dossiers et fichiers
$ rev liste | sort | rev
Gargantua
paupol
azerty
-par ordre croissant alphanumérique de la lettre à la position x[1-n](n dernier):si x=3
$ sort -k 1.3 liste
azerty
Gargantua
paupol
-rechercher les noms de fichiers dossiers qui se terminent par un caractère précis
Recherche des fichiers ou répertoires dont le nom se termine par X, par exemple
find -name '*X'
-rechercher les noms de fichiers dossiers dont le caractère à la position x est un caractère précis
Recherche des fichiers ou répertoires dont le nom contient un X en 3ème position, par exemple
find -name '??X*'
Hors ligne
#5 Le 20/01/2018, à 17:52
- qolepam
Re : tri et recherche spécifique de noms de fichiers
merci bien !
...et pour associer find à sort ?
Dernière modification par qolepam (Le 20/01/2018, à 18:16)
Hors ligne
#6 Le 20/01/2018, à 18:02
- Watael
Re : tri et recherche spécifique de noms de fichiers
$ sort -k 1.3 liste
+1
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 20/01/2018, à 18:37
- pingouinux
Re : tri et recherche spécifique de noms de fichiers
...et pour associer find à sort ?
Il suffit d'enchaîner les deux commandes. Par exemple :
find -name ..... | sort -k 1.3
Hors ligne
#8 Le 20/01/2018, à 22:33
- qolepam
Re : tri et recherche spécifique de noms de fichiers
enfin une question non répondue:
pour trier selon l'ordre alphanumérique du dernier caractère,sachant que la position par rapport au 1er caractère du dernier caractère est aléatoire à cause des noms de longueur variable ?
Dernière modification par qolepam (Le 20/01/2018, à 23:07)
Hors ligne
#9 Le 21/01/2018, à 06:58
- pingouinux
Re : tri et recherche spécifique de noms de fichiers
enfin une question non répondue:
pour trier selon l'ordre alphanumérique du dernier caractère,sachant que la position par rapport au 1er caractère du dernier caractère est aléatoire à cause des noms de longueur variable ?
C'est la première réponse en #4 : les caractères de chaque ligne sont inversés avant de faire le tri, puis inversés de nouveaue pour tout remettre dans le bon sens.
rev liste | sort | rev
Hors ligne
#10 Le 21/01/2018, à 22:19
- qolepam
Re : tri et recherche spécifique de noms de fichiers
merci !
autres questions:
1)pour lister tous les noms par ordre inverse alphanumérique du caractère se trouvant avant le dernier caractère spécifique x
par exemple si ma liste est:
fichier;txt
document.pdf
azerty.jpg
gc.retard.c
avec x=.
la commande recherchée donnerait:
azerty.jpg
document.pdf
fichier.txt
gc.retard.c
2)pour lister tous les noms par ordre inverse alphanumérique du caractère se trouvant en n-ième position avant le dernier caractère spécifique x
exemple!: si x=. et n=2 la commande recherchée donnerait :
azerty.jpg
gc.retard.c
document.pdf
fichier.txt
merci
Hors ligne
#11 Le 21/01/2018, à 23:37
- pingouinux
Re : tri et recherche spécifique de noms de fichiers
Question 1 :
rev liste | sort -rt. -k 2.1 | rev
Question 2 :
rev liste | sort -rt. -k 2.2 | rev
Hors ligne
#12 Le 22/01/2018, à 00:06
- qolepam
Re : tri et recherche spécifique de noms de fichiers
merci beaucoup !
Dernière modification par qolepam (Le 22/01/2018, à 00:07)
Hors ligne
#13 Le 22/01/2018, à 08:08
- DonutMan75
Re : tri et recherche spécifique de noms de fichiers
Salut pingouinux, bonjour à tous,
chapeau pour la maîtrise du sort !
Juste par curiosité (j'ai suivi le fil de loin) :
sort -rt. -k 2.1
-r : cette option indique à sort d'effectuer le tri inverse
-t. : cette option indique à sort quel séparateur utiliser pour délimiter les champs (voir l'option -k ci-dessous)
-k x.y : cette option indique à sort de n'effectuer le tri que sur le caractère y du champ n°x, ainsi -k 2.3 sur "ABC-DEF-GHI" avec un FS sur '-' n'effectuerait le tri que sur "F" ???
C'est bien la bonne interprétation de ta commande ?
Du coup, si j'ai bien compris, pour trier mes fichiers par ordre inverse des extensions (.txt, .exe, .png... on va supposer qu'on a monté une partition windows ^^) :
$ ls | rev | sort -rt. -k 1 | rev
Ou bien si on est sûr que le retour de ls est de la forme "fichier.ext" avec un seul et unique "." au bon endroit :
$ ls | sort -rt. -k 2
Ca me semble correct ?
Bonne journée à tous
Donut
Hors ligne
#14 Le 22/01/2018, à 10:28
- pingouinux
Re : tri et recherche spécifique de noms de fichiers
sort -rt. -k 2.1
-r : cette option indique à sort d'effectuer le tri inverse
-t. : cette option indique à sort quel séparateur utiliser pour délimiter les champs (voir l'option -k ci-dessous)
-k x.y : cette option indique à sort de n'effectuer le tri que sur le caractère y du champ n°x, ainsi -k 2.3 sur "ABC-DEF-GHI" avec un FS sur '-' n'effectuerait le tri que sur "F" ???
Oui pour -r et -t.
-k x.y : cette option indique à sort de n'effectuer le tri que sur le d'effectuer le tri à partir du caractère y du champ n°x
Si tu veux te limiter à ce seul caractère, c'est
sort -s -k x.y,x.y ...
Du coup, si j'ai bien compris, pour trier mes fichiers par ordre inverse des extensions (.txt, .exe, .png... on va supposer qu'on a monté une partition windows ^^) :
$ ls | rev | sort -rt. -k 1 | rev
Le tri va bien être effectué sur les extensions, mais écrites à l'envers (ça ne change évidemment rien pour les deux premières) : txt, exe, gnp
Ou bien si on est sûr que le retour de ls est de la forme "fichier.ext" avec un seul et unique "." au bon endroit :
$ ls | sort -rt. -k 2
Ca me semble correct ?
Oui
Hors ligne
#15 Le 22/01/2018, à 23:58
- qolepam
Re : tri et recherche spécifique de noms de fichiers
question:
quand le champ séparateur est un espace,que doit-on indiquer après -t ?
merci
Dernière modification par qolepam (Le 22/01/2018, à 23:58)
Hors ligne
#16 Le 23/01/2018, à 07:41
- pingouinux
Re : tri et recherche spécifique de noms de fichiers
quand le champ séparateur est un espace,que doit-on indiquer après -t ?
-t\ (-t backslash espace) ou -t" " (ou rien si on veut qu'une succession d'espaces ou de tabulations soit un séparateur)
Dernière modification par pingouinux (Le 23/01/2018, à 07:44)
Hors ligne