[SHELL] Script renommage Unix

Bonjour,

J'essaye de renommer les fichiers d'un répertoire de la manière suivante :

		for fichier in *
		do
			if [ -f $fichier ]; then
				mv $file $pref$file
			fi
		done


Seulement, ça peut marcher uniquement si mon script se trouve dans le repertoire des fichiers à renommer.

Y'aurait il une solution pour pouvoir lancer un tel script depuis n'importe quel repertoire ?

Merci d'avance.
Configuration: Windows XP
Firefox 2.0.0.6

6 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    oui, il y a :-)

    root@debian:~# cat ccm.sh
    #!/bin/bash
    
    rep=$1
    
    for fichier in $1/*
    do
    if [ -f $fichier ]; then
    mv $fichier "$fichier.bak"
    fi
    done
    root@debian:~# pwd
    /home/lami20j
    root@debian:~# ls /home/lami20j/trash/
    fic1.txt  fic2.txt
    root@debian:~# sh ccm.sh /home/lami20j/trash
    root@debian:~# ls /home/lami20j/trash/
    fic1.txt.bak  fic2.txt.bak

    1. Merci pour vos réponses.
      Il n'y a donc pas de solution sans avoir à faire un "cd" ?
      1. il manque un guillement double apres echo "usage : renommer.sh <repertoires>
        mes excuses
        1. #! /bin/bash

          # si pas d'arguments
          if [ $# -le 0 ]
          then
          echo "usage : renommer.sh <repertoires>
          exit 1
          fi

          # repertoire de depart pour gerer les cas de noms relatifs de repertoires cibles
          start="$PWD"

          # pour traiter les fichiers avec des espaces, on change l'IFS, attention a ne pas utiliser ce caractere
          # dans le script, sinon, changer l'IFS.
          # Normalement ce caractere n'est pas utilise pour les nom de fichiers,
          # sinon, changer l'IFS
          IFS='¤'

          # fonction de renommage
          # en entree le nom du fichier, en sortie (standard) son nouveau nom
          function rename_file
          {
          local pref="monprefixe_"
          echo "$pref$1"
          }

          # parcours de la liste des repertoires en entree
          while [ $# -gt 0 ]
          do
          # descente dans le repertoire en entree
          if cd "$1"
          then
          # pour chaque fichier
          for file in *
          do
          mv "$file" "$(rename_file "$1")"
          done

          # retour repertoire de depart
          cd "start"
          fi

          # passage au repertoire en entree suivant
          shift
          done
          1. Modérateur
            Salut,

            Tu peux par exemple :
            #! /bin/bash
            
            cd "$1"
            
            for fichier in *
            do
            if [ -f $fichier ]; then
            mv $file $pref$file
            fi
            done 
            en lançant ton script avec le chemin absolu vers ton répertoire en paramètre...

            ;-))