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 26/11/2015, à 15:02

McRbt

[Résolu] Chercher fichier le plus récent selon la saisie

Bonjour,

Pour le besoin d'un script, j'aimerais boucler un traitement sur des fichiers correspondant à la saisie de l'utilisateur.
Je m'explique :
Dans un dossier, on a des fichier comme ceci : "8XX-20151126".
Le "8XX" correspond à une application bien spécifique et le "20151126" correspond à la date à laquelle ce dossier a été enregistré.
Je souhaiterais, si l'utilisateur saisie "825", récupérer le dossier "825-XXXXXXXX" le plus récent.

Voici ce que j'ai commencé à faire, mais ce début de script me sors juste le fichier le plus récent tel qu'il soit, sans faire attention à la saisie de l'utilisateur :

#!/bin/bash -x
read -p 'Entrez numéro instance (e.g.: 825) : ' PROCEED

if [ "$PROCEED" -eq `find "$PROCEED"* | head -1 | cut -d- -f1` ] ; then
        echo "Le fichier le plus récent est : "
        echo `ls -got| grep \.txt$ | head -1 | awk '{print $7}'`
else
        echo "Aucun fichier correspondant à l'instance."
fi

Cordialement,
McRbt

Dernière modification par McRbt (Le 26/11/2015, à 17:29)

Hors ligne

#2 Le 26/11/2015, à 15:44

soshy

Re : [Résolu] Chercher fichier le plus récent selon la saisie

Ce que fait reellement ton script :
si le numero saisi existe dans ta liste de fichiers alors afficher le plus recent (cree ou modifie je ne sais pas trop) de tous les fichiers.

il faut changer ta ligne

echo `ls -got| grep \.txt$ | head -1 | awk '{print $7}'`

avec par exemple (je ne dis pas que la solution est bonne, mais elle devrait fonctionner)

echo `ls -got $PROCEED* | grep \.txt$ | head -1 | awk '{print $7}'`

Avec ca, le ls ne retourne que les fichiers qui commencent par la saisie utilisateur. On aurait aussi pu mettre le filtre de $PROCEED dans le grep. Ou alors on pourrait aussi enlever le grep faire

ls -got $PROCEED*.txt

en gardant la suite.

Plein de solutions ! :-)
Certaines meilleures que d'autre mais moi je ne suis pas qualifie pour juger.

Dernière modification par soshy (Le 26/11/2015, à 15:52)

Hors ligne

#3 Le 26/11/2015, à 15:53

McRbt

Re : [Résolu] Chercher fichier le plus récent selon la saisie

soshy,

J'ai tout essayé sauf cette solution qui me paraît toute simple maintenant.
Je te remercie, ça fonctionne à merveille.

Je passe en résolu.

Cordialement,
McRbt

Hors ligne

#4 Le 26/11/2015, à 16:20

pingouinux

Re : [Résolu] Chercher fichier le plus récent selon la saisie

Bonjour,
Et pourquoi pas ceci

ls -t $PROCEED*.txt | head -1

Hors ligne

#5 Le 26/11/2015, à 16:38

McRbt

Re : [Résolu] Chercher fichier le plus récent selon la saisie

pingouinux,

Encore plus simple, merci.
Est-ce possible de placer cette commande dans une variable, de façon à la réutiliser ultérieurement ?
Du style :

RECENT_FILE_PROCEED=`ls -t $PROCEED*.txt | head -1`

Cordialement,
McRbt

EDIT : Après quelques tests, j'ai obtenu le résultat obtenu, aussi au niveau de la variable. Merci à tout les deux, à la prochaine !

Dernière modification par McRbt (Le 26/11/2015, à 16:41)

Hors ligne

#6 Le 26/11/2015, à 16:49

MicP

Re : [Résolu] Chercher fichier le plus récent selon la saisie

En utilisant les tableaux bash:

RECENT_FILE_PROCEED=$(liste=($(ls -t ${PROCEED}*));echo $liste)

Dernière modification par MicP (Le 26/11/2015, à 20:01)

Hors ligne

#7 Le 26/11/2015, à 16:51

McRbt

Re : [Résolu] Chercher fichier le plus récent selon la saisie

MicP, pingouinux, soshy,

Comment effectuer cette commande sur un dossier spécifique ? Où doit-on indiquer le chemin ? Peut-on le faire avec ls ?

Hors ligne

#8 Le 26/11/2015, à 16:57

MicP

Re : [Résolu] Chercher fichier le plus récent selon la saisie

Tu pourrais utiliser une variable qui serait concaténée avec ${PROCEED} :

read -p 'Entrez le répertoire : ' chemin
RECENT_FILE_PROCEED=$(liste=($(ls -t ${chemin}/${PROCEED}*));echo "$liste")

ou bien :

read -p 'Entrez le répertoire : ' chemin
RECENT_FILE_PROCEED=`ls -t ${chemin}/${PROCEED}* | head -1`

EDIT : J'avais oublié la "bonne étoile" et ajouté un ".txt" en trop, j'ai donc modifié mes messages.

Dernière modification par MicP (Le 26/11/2015, à 20:02)

Hors ligne

#9 Le 26/11/2015, à 17:15

McRbt

Re : [Résolu] Chercher fichier le plus récent selon la saisie

MicP,

Je me sens un peu stupide, j'aurais dû y penser...
Merci encore, sans surprise : ça fonctionne.

Cordialement,
McRbt

Hors ligne