Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
798 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [bash] trouver le fichier le plus recent dans un dossier avec find

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[bash] trouver le fichier le plus recent dans un dossier avec find

n°1090160
thierryR
J'aime les bretzels
Posté le 15-11-2008 à 21:13:13  profilanswer
 

Bonjour.
Je cherche à exécuter le fichier du jour dans un dossier
Voici ma foormule
 

#!/bin/bash
 
if [ "$#" != 1 ]
then
echo "Utilisation : $0 "
exit 1
fi
 
 
if ! [ -d "$1" ]
then
echo "$1 n'est pas un répertoire"
exit 2
fi
 
cd $1;
 
touch -t $(date +%Y%m%d0000) xx.tmp
 
if ! [ -f xx.tmp ]
then
echo " Erreur sur Fichier temporaire"
exit 3
fi
 
find $1 -newer xx.tmp
 
rm xx.tmp


 
La commande find me ressort 2 lignes en console.
Je n'arrive pas à aller plus loin....
Il me faudrait récupérer le nom du fichier et l'éxécuter
 
Je sais que ça doit rester simple mais j'ai oublier la bonne formule
Une petite aide s'il vous plait.  
Merci


Message édité par thierryR le 16-11-2008 à 17:49:27

---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
mood
Publicité
Posté le 15-11-2008 à 21:13:13  profilanswer
 

n°1090206
thierryR
J'aime les bretzels
Posté le 16-11-2008 à 00:21:16  profilanswer
 

Voila une suite qui mérite amélioration.
J'ai récupéré la 1ere ligne mais pas encore la 2e
 

find $1 -newer xx.tmp | while read line;  
 do  
 echo "line = $line"
       done


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
n°1090400
thierryR
J'aime les bretzels
Posté le 16-11-2008 à 17:48:53  profilanswer
 

Voila la solution.... Je voulais localiser la 2e ligne

find $1 -newer xx.tmp > result.tmp
while read line;  
do  
 i=$((i+1));  
 var[$i]=$line;  
 if [ $i = 2 ] then filename = ${var[$i]};fi
done < result.tmp



---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
n°1090482
sputnick
bip...bip...bip...bip...bi...b
Posté le 17-11-2008 à 00:00:40  profilanswer
 

Code :
  1. find | ls -1tr | tail -1


ou plus simple :

Code :
  1. ls -1tr | tail -1

n°1090724
thierryR
J'aime les bretzels
Posté le 17-11-2008 à 19:43:38  profilanswer
 

Merci bip bip Voilà le résultat final. Mon but ultime étant de ressortir le fichier sql le plus récent.

#!/bin/bash
 
if [ "$#" != 1 ]
then
echo "Utilisation : $0 "
exit 1
fi
 
 
if ! [ -d "$1" ]
then
echo "$1 n'est pas un répertoire"
exit 2
fi
 
cd $1;
 
#installer si le fichier est d'aujourd'hui
 
touch -t $(date +%Y%m%d0000) xx.tmp
 
if ! [ -f xx.tmp ]
then
echo " Erreur sur Fichier temporaire"
exit 3
fi
 
 
find $1 -name '*.sql' -newer xx.tmp > result.tmp
read linesql < result.tmp;  
rm xx.tmp
rm result.tmp
 
 
# mettre à jour la base de donnée
if [ -f "$linesql" ]
then
echo "exécution de la mise à jour des bases de données $linesql"
mysql -uroot -pxxxxxxxx < $linesql
else  
echo  "pas de sauvegarde trouvée pour ce jour"
fi


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
n°1090994
sputnick
bip...bip...bip...bip...bi...b
Posté le 18-11-2008 à 21:44:12  profilanswer
 

Bon, j'ai simplifié et optimisé ton script. Tu faisait des trucs relativement tordus à mon sens. J'ai aussi corrigé quelques petites erreurs comme les quotes manquantes et la mention <repertoire> manquante dans l'aide.
 


#!/bin/bash
 
if [ "$#" != 1 ]
then
echo "Utilisation : $0 <repertoire>"
exit 1
fi
 
if ! [ -d "$1" ]
then
echo "$1 n'est pas un répertoire"
exit 2
fi
 
cd $1;
 
linesql="$(find "$1" -mmin -$((`date +%H`*60)) -iname '*.sql')"
 
# mettre à jour la base de donnée si le fichier du jour est existant
if [ -f "$linesql" ]
then
echo "exécution de la mise à jour des bases de données $linesql"
mysql -uroot -pxxxxxxxx < "$linesql"
else
echo  "pas de sauvegarde trouvée pour ce jour"
fi


 
Cela te convient ? ( Essaye autant que possible d'énoncer un peu plus clairement ton souci stp ;) la prochaine fois. )

n°1092487
thierryR
J'aime les bretzels
Posté le 24-11-2008 à 18:29:50  profilanswer
 

Wahou........ C'est pas de mon niveau mais ça m'a l'air impec. Effectivement c'est beaucoup plus simple


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/
n°1093742
sputnick
bip...bip...bip...bip...bi...b
Posté le 29-11-2008 à 02:50:43  profilanswer
 

Si ya des parties que tu ne comprends pas, demande...

n°1096663
p-seeker23
Posté le 11-12-2008 à 17:33:31  profilanswer
 

On peut compacter un peu le début, si ça te dit :  
 

Code :
  1. [ $# -ne 1 ] && echo "Utilisation : $0 <repertoire>" && exit 1
  2. [ ! -d "$1" ] && echo "$1 n'est pas un répertoire" && exit 2 || cd "$1"
  3. linesql=..


 
 :D  

n°1096964
thierryR
J'aime les bretzels
Posté le 12-12-2008 à 23:45:33  profilanswer
 

Je vais finir par savoir écrire des scripts avec de tels renseignements .[:bananav]
Merci.


---------------
Penguin online qui ne fait que des conneries, et qui aime ça. Membre du http://www.fonacon.net/

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [bash] trouver le fichier le plus recent dans un dossier avec find

 

Sujets relatifs
[bash] commande lors de l'ouverture d'un terminal[resolu] changer de dossier thunderbird
Script qui change l'extension d'un fichierDifference rename et copie de fichier
Problème Démarrage Vista - Fichier NTOSKRNL.EXE manquantComment déplacer le dossier /home vers une partition ?
[RESOLU] Suppression d'adresse IP dans un fichier[RESOLU] impossible de trouver authldap.schema pur courrier
Fichier transformé en répertoire[RESOLU] Commande SED : suppresion d'une variable dans un fichier KO
Plus de sujets relatifs à : [bash] trouver le fichier le plus recent dans un dossier avec find


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR