[SHELL] Script renommage Unix
tomk41
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
tomk41 -
tomk41 -
Bonjour,
J'essaye de renommer les fichiers d'un répertoire de la manière suivante :
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.
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:
- [SHELL] Script renommage Unix
- Classic shell - Télécharger - Personnalisation
- Renommage de fichier - Guide
- Script vidéo youtube - Guide
- Mas script - Accueil - Windows
- Ghost script - Télécharger - Polices de caractères
6 réponses
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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