[SHELL] Script renommage Unix

tomk41 Messages postés 12 Statut Membre -  
 tomk41 -
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

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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...

    ;-))
    0
  2. goelfou
     
    #! /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
    0
  3. goelfou
     
    il manque un guillement double apres echo "usage : renommer.sh <repertoires>
    mes excuses
    0
  4. tomk41 Messages postés 12 Statut Membre
     
    Merci pour vos réponses.
    Il n'y a donc pas de solution sans avoir à faire un "cd" ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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

    0