[SHELL] Script renommage Unix

Fermé
tomk41 Messages postés 12 Date d'inscription mercredi 18 avril 2007 Statut Membre Dernière intervention 15 septembre 2008 - 3 sept. 2007 à 13:30
 tomk41 - 3 sept. 2007 à 16:13
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.
A voir également:

6 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
3 sept. 2007 à 13:37
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
#! /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
il manque un guillement double apres echo "usage : renommer.sh <repertoires>
mes excuses
0
tomk41 Messages postés 12 Date d'inscription mercredi 18 avril 2007 Statut Membre Dernière intervention 15 septembre 2008
3 sept. 2007 à 14:36
Merci pour vos réponses.
Il n'y a donc pas de solution sans avoir à faire un "cd" ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
3 sept. 2007 à 14:51
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
merci
0