Deplacement de fichiers avec horodatage
dino
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
je voudrais mettre en place un script qui copie ou deplace tout les fichiers presents dans certain repertoires present dans un repertoire connu ,en ajoutant un horodatage a la fin des fichiers.
J'ai pensé a ca :
cat listrep.txt :
chemin 1
chemin 2
chemin 3
Archive=
DATE='date +"%d/%m/%Y-%H%M%S"'
for i in 'cat list_rep.txt' ; do
cp -Rp "chemin"/$i/* Archive/$i/*_$DATE
done
mais comment donner le nom du fichier sauvegarder avec l'extention de DATE a chaque fichier ?
Merci a tous
je voudrais mettre en place un script qui copie ou deplace tout les fichiers presents dans certain repertoires present dans un repertoire connu ,en ajoutant un horodatage a la fin des fichiers.
J'ai pensé a ca :
cat listrep.txt :
chemin 1
chemin 2
chemin 3
Archive=
DATE='date +"%d/%m/%Y-%H%M%S"'
for i in 'cat list_rep.txt' ; do
cp -Rp "chemin"/$i/* Archive/$i/*_$DATE
done
mais comment donner le nom du fichier sauvegarder avec l'extention de DATE a chaque fichier ?
Merci a tous
6 réponses
-
salut,
UUOC !for
boucle sur chaque mot, pas sur chaque ligne. :(while read line
do echo "line"
done < fichier
mais comment donner le nom du fichier sauvegarder avec l'extention de DATE a chaque fichier ?while read -r fichier
do cp -p fichier /destination/$(basename "$fichier")_$Date
done < fichier.txt
pourquoi le nom des fichiers à copier sont-ils dans un fichier ? -
Merci pour ta reponse !
Mais ,je n'ai pas le nom des fichiers ,par contre leurs endroit oui ,du coup j'ai mis le chemin absolus de chaque repertoire dans un fichier listrep.txt.
Le script va lire chaque chemin ,et deplaceras tout le contenue dans mon archive.
ce qui reste c'est donner l'extention "$DATE" a chaque fichier deplacés.
qd tu ecris :
"cp -p fichier /destination/$(basename "$fichier")_$Date"
je n'ai pas le nom de "fichier"
je pense a un "find" :
find $i -type f exec cp {} ARCHIVE/ \;
mais mettre quoi comme nom apres ARCHIVE/"?????" pour avoir les meme fichiers avec "_DATE" ?
Merci -
Salut,
$ tree rep/ # arborescence
rep/
|-- A
| |-- tata
| '-- toto
|-- B
| '-- titi
'-- C
'-- tutu
3 directories, 4 files
# Création variable date
$ DATE=$(date +"%d-%m-%Y_%H%M%S")
# La commande avec cp en mode verbeux
$ for i in $(find rep -depth -type d);do cp -b -Rvp -S "_${DATE}" --parents "${i}" backup ;done
rep -> backup/rep
«rep/C» -> «backup/rep/C»
«rep/C/tutu» -> «backup/rep/C/tutu»
«rep/B» -> «backup/rep/B»
«rep/B/titi» -> «backup/rep/B/titi»
«rep/A» -> «backup/rep/A»
«rep/A/tata» -> «backup/rep/A/tata»
«rep/A/toto» -> «backup/rep/A/toto»
«rep/C/tutu» -> «backup/rep/C/tutu» (archive : «backup/rep/C/tutu_14-05-2014_122634»)
«rep/B/titi» -> «backup/rep/B/titi» (archive : «backup/rep/B/titi_14-05-2014_122634»)
«rep/A/tata» -> «backup/rep/A/tata» (archive : «backup/rep/A/tata_14-05-2014_122634»)
«rep/A/toto» -> «backup/rep/A/toto» (archive : «backup/rep/A/toto_14-05-2014_122634»)
# Le contenu du backup
$ tree backup/
backup/
'-- rep
|-- A
| |-- tata
| |-- tata_14-05-2014_122634
| |-- toto
| '-- toto_14-05-2014_122634
|-- B
| |-- titi
| '-- titi_14-05-2014_122634
'-- C
|-- tutu
'-- tutu_14-05-2014_122634
4 directories, 8 files
# On initie à nouveau la variable DATE
$ DATE=$(date +"%d-%m-%Y_%H%M%S")
# Et on relance la commande
$ for i in $(find rep -depth -type d);do cp -b -Rvp -S "_${DATE}" --parents "${i}" backup ;done
«rep/C/tutu» -> «backup/rep/C/tutu» (archive : «backup/rep/C/tutu_14-05-2014_122706»)
«rep/B/titi» -> «backup/rep/B/titi» (archive : «backup/rep/B/titi_14-05-2014_122706»)
«rep/A/tata» -> «backup/rep/A/tata» (archive : «backup/rep/A/tata_14-05-2014_122706»)
«rep/A/toto» -> «backup/rep/A/toto» (archive : «backup/rep/A/toto_14-05-2014_122706»)
«rep/C/tutu» -> «backup/rep/C/tutu» (archive : «backup/rep/C/tutu_14-05-2014_122706»)
«rep/B/titi» -> «backup/rep/B/titi» (archive : «backup/rep/B/titi_14-05-2014_122706»)
«rep/A/tata» -> «backup/rep/A/tata» (archive : «backup/rep/A/tata_14-05-2014_122706»)
«rep/A/toto» -> «backup/rep/A/toto» (archive : «backup/rep/A/toto_14-05-2014_122706»)
# Nouveau contenu du backup
$ tree backup/
backup/
'-- rep
|-- A
| |-- tata
| |-- tata_14-05-2014_122634
| |-- tata_14-05-2014_122706
| |-- toto
| |-- toto_14-05-2014_122634
| '-- toto_14-05-2014_122706
|-- B
| |-- titi
| |-- titi_14-05-2014_122634
| '-- titi_14-05-2014_122706
'-- C
|-- tutu
|-- tutu_14-05-2014_122634
'-- tutu_14-05-2014_122706
4 directories, 12 files
-
-
Meuh non, pas z'ici ;-))
$ tree rep/
rep/
|-- A
| |-- le fichier à trou
| |-- tata
| '-- toto
|-- B
| '-- titi
'-- C
'-- tutu
3 directories, 5 files
$ for i in $(find rep -depth -type d);do cp -b -Rvp -S "_${DATE}" --parents "${i}" backup ;done
rep -> backup/rep
«rep/C» -> «backup/rep/C»
«rep/C/tutu» -> «backup/rep/C/tutu»
«rep/B» -> «backup/rep/B»
«rep/B/titi» -> «backup/rep/B/titi»
«rep/A» -> «backup/rep/A»
«rep/A/le fichier à trou» -> «backup/rep/A/le fichier à trou»
«rep/A/tata» -> «backup/rep/A/tata»
«rep/A/toto» -> «backup/rep/A/toto»
«rep/C/tutu» -> «backup/rep/C/tutu» (archive : «backup/rep/C/tutu_14-05-2014_122706»)
«rep/B/titi» -> «backup/rep/B/titi» (archive : «backup/rep/B/titi_14-05-2014_122706»)
«rep/A/le fichier à trou» -> «backup/rep/A/le fichier à trou» (archive : «backup/rep/A/le fichier à trou_14-05-2014_122706»)
«rep/A/tata» -> «backup/rep/A/tata» (archive : «backup/rep/A/tata_14-05-2014_122706»)
«rep/A/toto» -> «backup/rep/A/toto» (archive : «backup/rep/A/toto_14-05-2014_122706»)
$ tree backup/
backup/
'-- rep
|-- A
| |-- le fichier à trou
| |-- le fichier à trou_14-05-2014_122706
| |-- tata
| |-- tata_14-05-2014_122706
| |-- toto
| '-- toto_14-05-2014_122706
|-- B
| |-- titi
| '-- titi_14-05-2014_122706
'-- C
|-- tutu
'-- tutu_14-05-2014_122706
4 directories, 10 files -
-
-
-
-
Merci a tous ,
entre temps j'ai fais ca et ca fct :
for i in 'cat list_rep.txt' ; do
for j in 'ls -1 "CHEMIN1/$i' ; do
cp -Rp $CHEMIN1/$i/$j ARCHIVE/$i/$(basename $j)_'date +"%Y-%m%d-%H.%M.%S"'
done
done
Mais a vous lire ,c vrai que cette methode a ses limites ne va pas plus loin qu'un sou repertoire.
Merci a tous !-
y en a qui cherche les coups !?
while read -r chemin
do
for i in "$chemin"/*
do
test -d "$CHEMIN/$chemin" || mkdir "$CHEMIN/$chemin"
cp -p "$CHEMIN/$chemin/$fichier" Archive/$chemin/${fichier##/*}_$(date +'%Y-%m%d-%H.%M.%S')
done
done < list_rep.txt
mais, tu n'as pas répondu : pourquoi le noms des chemins sont-ils dans un fichier ?
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Par ce que j'ai plusieurs repertoire ,et je met le chemin absolu dans un fichier que je lis ligne par ligne
-
Bonjour,
Je suis en ksh et j'ai plusieurs repertoires.
Pour ta proposition :
- "while read -r chemin "
j'ai plusieurs chemins
- "cp -p "$CHEMIN/$chemin/$fichier" Archive/$chemin/${fichier##/*}_$(date +'%Y-%m%d-%H.%M.%S')"
${fichier##/*} : c'est le nom du fichier finale a la sauvegarde ?
Merci-
while read -r chemin
va lire chaque ligne du fichier, la mettre dans la variablechemin
, et exécutercp
.
${fichier##motif}est un développement de variable qui permet de ne pas appeler de commande externe, qui n'affiche pas ce qui précéde le motif (c'est dans leman
: Retrait du motif correspondant au préfixe).
par exemple:$ var=abcdbe
d'ailleurs, attention, je me suis trompé, ça doit être :
$ echo ${var##*b}
e
$ echo ${var#*b}
cdbe${chemin##*/}:(
tu trouveras aussi dans leman
le développement des accolades, et donc au lieu d'utiliser un fichier, si tu n'as pas trop de chemins à explorer (ça peut devenir illisible), tu peux "résumer" des expressions, ainsi :/chemin/{chemin1,ch{1,2,N}}/est développé en/chemin/chemin1/ /chemin/ch1 /chemin/ch2/ /chemin/chN
:)
et doncfor rep in /racine/{chemin_1,chemin_2,chemin_N}/peut éviter le recours à un fichier.
do echo "traitement de $rep"
done
-