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
A voir également:
- Deplacement de fichiers avec horodatage
- Explorateur de fichiers - Guide
- Renommer des fichiers en masse - Guide
- Mes deplacement - Guide
- Fichiers epub - Guide
- Gestionnaire de fichiers - Télécharger - Gestion de fichiers
6 réponses
salut,
UUOC !
mais comment donner le nom du fichier sauvegarder avec l'extention de DATE a chaque fichier ?
pourquoi le nom des fichiers à copier sont-ils dans un fichier ?
UUOC !
forboucle 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
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 !
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 !?
mais, tu n'as pas répondu : pourquoi le noms des chemins sont-ils dans un fichier ?
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
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 cheminva lire chaque ligne du fichier, la mettre dans la variable
chemin, et exécuter
cp.
${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 le man: Retrait du motif correspondant au préfixe).
par exemple:
$ var=abcdbed'ailleurs, attention, je me suis trompé, ça doit être :
$ echo ${var##*b}
e
$ echo ${var#*b}
cdbe
${chemin##*/} :(
tu trouveras aussi dans le
manle 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 donc
for rep in /racine/{chemin_1,chemin_2,chemin_N}/
do echo "traitement de $rep"
donepeut éviter le recours à un fichier.