[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
tomk41 - 3 sept. 2007 à 16:13
A voir également:
- [SHELL] Script renommage Unix
- Script vidéo youtube - Guide
- Classic shell windows 11 - Télécharger - Personnalisation
- Microsoft activation script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
- Script cmd - Guide
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 897
3 sept. 2007 à 13:37
3 sept. 2007 à 13:37
Salut,
Tu peux par exemple :
;-))
Tu peux par exemple :
#! /bin/bash cd "$1" for fichier in * do if [ -f $fichier ]; then mv $file $pref$file fi doneen lançant ton script avec le chemin absolu vers ton répertoire en paramètre...
;-))
#! /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
# 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
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
3 sept. 2007 à 14:36
Merci pour vos réponses.
Il n'y a donc pas de solution sans avoir à faire un "cd" ?
Il n'y a donc pas de solution sans avoir à faire un "cd" ?
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 569
3 sept. 2007 à 14:51
3 sept. 2007 à 14:51
Salut,
oui, il y a :-)
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