Re: script bash basename

Page principale

Répondre à ce message
Auteur: Voxelf
Date:  
À: guilde
Sujet: Re: script bash basename
Salut,
Moi j'utiliserai la fonction de substitution intégrée à Bash:

${var/Pattern/Replacement}
    First match of Pattern, within var replaced with Replacement.
    If Replacement is omitted, then the first match of Pattern is
replaced by nothing, that is, deleted.


trouvé sur http://www.tldp.org/LDP/abs/html/parameter-substitution.html
J'ai testé, ça marche même avec une variable à la place de Pattern

Gabriel

On 25/02/2016 22:41, anne.guilde@??? wrote:
> 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
>