[Bash]Pb avec locate dans un script

Fermé
Kopros Messages postés 595 Date d'inscription mardi 25 septembre 2007 Statut Membre Dernière intervention 3 février 2020 - Modifié par Kopros le 6/12/2011 à 19:02
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 7 déc. 2011 à 08:21
Bonjour à tous,

Ca fait très longtemps que j'ai pas touché à un script Bash, là j'en ai besoin et forcément ça coince.

Voici la situation:
J'ai beaucoup de fichiers en vrac dans un dossier qui n'a pas de sous-dossiers.
Sur une partition, j'ai des fichiers qui portent les mêmes noms que ceux en vrac, mais une autre extension, et ceux là sont bien rangés.

Le but est de recréer l'arborescence, à partir d'un certain dossier, des fichiers bien rangés, et d'y copier les fichiers en vrac

Pour ça j'utilise le locate dans mon script, mais il ne retourne rien du tout !! Le voici :

#!/bin/bash 
#MàJ pour le locate 
updatedb 

# Dossier où ya les fichiers en vrac 
DossierSource="/home/nicolas/Bureau/test/" 
# Dossier où on va mettre les copies bien rangées 
DossierDestination="/media/Musiques/Musiques/" 
# Dossier qui contient les fichiers bien rangés 
DossierSrch="/media/Musiques/" 

# pour les espaces dans les noms des fichiers 
IFS=$'\' 

# parcours des fichiers en vrac 
Fichiers="$(ls ${DossierSource})" 

for File in ${Fichiers}; do 
 if [ "${File}" != "." ] && [ "${File}" != ".." ] ; then 
  # test 
  echo $File  
#jusque là pas de soucis, chaque fichier est bien écrit 
  FilesFound="$(locate "${File}")" 
  # test 
  echo $FilesFound 
# là ya rien du tout qui s'affiche !!!!!! du coup la suite n'est pas exécutée 
  for FF in ${FilesFound}; do 
   BasePath="$(dirname ${FF})" 
   if [ $BasePath != "${DossierSource}" ] && [ $BasePath != "${DossierDestination}" ] ; then 
# pour la ligne du dessous c'est pas propre, je sais pas comment faire autrement pour 
# enlever du chemin trouvé le DossierSrch 
    NewBP=$BasePath | cut -c${#DossierSrch}-1000000 
    target="$DossierDestination$NewBP/" 
    source="$DossierSource/$File" 
    if [ ! -d 'dirname $target' ] ; then 
        mkdir -m 755 -p $(dirname $target) 
    fi 
    cp -Rfp $source $target 
   fi 
  done 
 fi 
done 

exit 0


Voilà bien évidemment je suis même pas sûr que la synthaxe est bonne.
Ca fait des plombes que je suis sur ce petit script, et ça commence à bien me prendre la tête...

Merci de me venir en aide !

A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
7 déc. 2011 à 07:36
Salut,

FilesFound="$(locate "${File}")"
# test
echo $FilesFound
# là ya rien du tout qui s'affiche !!!!!! du coup la suite n'est pas exécutée

Est-ce que tu obtiens quelque chose depuis un terminal avec la commande :
locate nom_d_un_fichier_présent_dans_/home/nicolas/Bureau/test/

La commande "locate" élude certains répertoires, as-tu vérifié que le tien n'en faisait pas partie ?
0
Moi je trouve bizarre le double emploi de quotes, mais je peux me tromper, j'ai pas testé :
"$(locate "${File}")"


Sinon :
# pour la ligne du dessous c'est pas propre, je sais pas comment faire autrement pour
# enlever du chemin trouvé le DossierSrch


Peut-être tout simplement en l'excluant dès ta recherche :
"$(locate "${File}" | grep -v $DossierSrch)"

(modulo les quotes qui sont peut-être mauvais, cf ma remarque ci-dessus)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
7 déc. 2011 à 08:21
Moi je trouve bizarre le double emploi de quotes, mais je peux me tromper, j'ai pas testé
Pas de soucis ;-))

$ locate plop
/home/jp/tmp/plop
/home/jp/tmp/rep/plop

$ fic="plop"

$ result="$(locate "${fic}")"

$ echo "$result"
/home/jp/tmp/plop
/home/jp/tmp/rep/plop

$ 

;-))
0