script bash basename

Page principale

Répondre à ce message
Auteur: anne.guilde@free.fr
Date:  
À: ML Guilde
Sujet: script bash basename
bonjour,

Je veux trouver tous les fichiers normaux d'un répertoire et de ses
sous-répertoire

# répertoire de recherche
/home/anne/toto/

avec la commande find je me retouve avec

/home/anne/toto/fich1
/home/anne/toto/fich2
/home/anne/toto/fich3
/home/anne/toto/rep1/fich4
/home/anne/toto/rep1/fich5
/home/anne/toto/rep2/fich6
/home/anne/toto/rep3/fich7

J'ai un répertoire /home/anne/titi/

Je veux vérifier si tous les fichiers qui sont dans toto existe dans
titi et ont le même contenu

J'ai fait un petit script bash

-----
#!/bin/bash

# repertoire recherche
repertdiff='/home/anne/resupt-rech/'
# repertoire old
listeold=( $(find /home/anne/toto -type f) )
# repertoire new
listenew='/home/anne/titi/'

nb_element=${#listeold[@]}

index=0

while [ "$index" -lt "$nb_element" ]
do    # Liste tous les elements du tableau.
   echo ${listeold[$index]}
   # recherche du nom du fichier
   nomfich=$(basename  ${listeold[$index]} )
   echo $nomfich
   # nom fichier avec le repertoire titi
   fichnew="$listenew$nomfich"
   echo $fichnew
   # nom de fichier pour la recherche du diff
   fichrech="$repertdiff$nomfich"
   # diff
   diff ${listeold[$index]}  $fichnew > $fichrech
   let "index = $index + 1"
   # ou index+=1 avec Bash 3.1 et suivants
done
-----


Je me suis servie de basename pour récupérer le nom du fichier.
Je n'avais pas pensé aux sous-répertoires quand j'ai pondu mon script.

avec '/home/anne/toto/rep1/fich4' Comment faire pour récupérer
'rep1/fich4'

avec '/home/anne/toto/rep1/rep11/fich41' Comment faire pour récupérer
'rep1/rep11/fich41'

avec basename je me retrouve avec fich4 sans son répertoire

répertoire de base /home/anne/toto/
il faut que je récupère tout ce qui est après le nom du répertoire de base.

merci pour vos lumières
Anne