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

trouver le fichier le plus recent dans un dossier avec find [bash] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 15-11-2008 à 21:13:13    

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/
Reply

Marsh Posté le 15-11-2008 à 21:13:13   

Reply

Marsh Posté le 16-11-2008 à 00:21:16    

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/
Reply

Marsh Posté le 16-11-2008 à 17:48:53    

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/
Reply

Marsh Posté le 17-11-2008 à 00:00:40    

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


ou plus simple :

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

Reply

Marsh Posté le 17-11-2008 à 19:43:38    

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/
Reply

Marsh Posté le 18-11-2008 à 21:44:12    

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. )

Reply

Marsh Posté le 24-11-2008 à 18:29:50    

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/
Reply

Marsh Posté le 29-11-2008 à 02:50:43    

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

Reply

Marsh Posté le 11-12-2008 à 17:33:31    

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  

Reply

Marsh Posté le 12-12-2008 à 23:45:33    

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/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed