Jolie démonstration, merci.
(j'aurai encore appris quelque chose ce soir, faudra juste que je m'en souvienne...)
Version imprimable
Bonjour,
Il y a l'erreur suivante
et un echo $nouveau_nom_fichier affiche /home/toto/source/aabbbccc*.txt comme valeur de cette variable alors qu'elle devrait avoir $nom_fichier amputé de $prefixCode:
1
2
3 $ ./renCATExp.sh mv: cannot stat '/home/toto/source/aabbbccc*.txt': No such file or directory
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #!/bin/bash #""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # Renommer export avant transfert" #""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" # renCATExpt.bash V0.1# GG # # Declaration variables script=/$HOME/scripts log=$HOME/logs archive=$HOME/archive source=$HOME/source prefix=aabbbccc ficlog=logrename.txt # Si absent, crée le fichier test ! -f "$log/$ficlog" && touch "$log/$ficlog" # puis, dans tous les cas, ajoute la date à laquelle le script est executé echo "$gdate" >> "$log/$ficlog" # Renommer fichier par suppression préfix 9 1er caractères # Boucle pour rechercher tout fichier debutant avec aaabbbccc suivi de _973 et une extension .txt situé dans le dossier $SOURCE for nom_fichier in "$source/$prefix"*.txt do # Attribuer à la variable nouveau_nom_fichier la valeur de nom_fichier sans le préfix aaabbbccc nouveau_nom_fichier=`echo $nom_fichier|sed 's/$prefix//g'`; # Renommer fichier mv "$nouveau_nom_fichier" "$archive" >> "$log/$ficlog" # Transferer fichier vers machine windows #scp "$archive"/*.txt toto@winserv:/~ done
Ouvre un peu les yeux!!!
Autre chose: une variable entre quotes simples n'est pas traduite (cf ton sed). De plus, la variable nouveau_nom contient (enfin contiendrait si le sed était correctement écrit) le nom modifié mais le fichier d'origine, lui, n'a pas encore ce nom => un check du mv ne serait pas inutile non plus.
Et quand je t'ai dit que tabuler deux fois (pour le "do" puis pour les instructions qui y sont associées) était idiot, c'est tout aussi nul de supprimer toutes les tabulations et coller ton code tout à gauche (j'ai l'impression de me retrouver dans une bd d'Iznogood). Pour une structure ça reste lisible mais quand tu en seras à 3 boucles imbriquées plus un "if"...:?
à moi :
#echo "$gdate" >> "$log/$ficlog"
c'est quoi ce gdate ?
abc.txt pour faire tes premiers tests c'était trop simple et trop lisible ? Résultat tu nous décourages et il faut s'accrocher pour essayer de te comprendre.Citation:
# Boucle pour rechercher tout fichier debutant avec aaabbbccc suivi de _973 et une extension .txt situé dans le dossier $SOURCE
En plus il n'y a rien dans source...
J'ai modifié ta boucle for en rajoutant trois témoins, qui permettent de voir que tu n'as rien dans tes dossiers, donc tu ne moveras rien :
Sortie :Code:
1
2
3
4
5
6
7
8
9
10 for nom_fichier in "$source/$prefix"*.txt do echo "ici $nom_fichier" # Attribuer à la variable nouveau_nom_fichier la valeur de nom_fichier sans le préfix aaabbbccc nouveau_nom_fichier=`echo $nom_fichier | sed 's/$prefix//g'`; # Renommer fichier echo "là $nouveau_nom_fichier" echo "dernier $archive" mv "$nouveau_nom_fichier" "$archive" >> "$log/$ficlog" done
Et ton message d'erreur montre simplement que tu as un nom de fichier mais pas le fichier.Code:
1
2
3
4 ici /tmp/source/aabbbccc*.txt là /tmp/source/aabbbccc*.txt dernier /tmp/archive mv: impossible d'évaluer '/tmp/source/aabbbccc*.txt': Aucun fichier ou dossier de ce type
Bonjour,
le gdate est une variable que j'ai fait pour ajouter la date dans le fichier de log
Ouf!!! ça m'a pris du temps mais le script fonctionne.Code:gdate=$(date +"%A %d %B %Y - %X")
En tout cas je vous remercie les gars de votre assistance. Les fichiers sont bien renommés et le fichier de log est bien alimenté.
Quant à moi je continu a pratiquer.
:ccool:
en bash :;)Code:printf -v gdate '%(%A %d %B %Y - %X)T'