#1 Le 07/12/2011, à 15:22
- jeanlucd
chercher , trouver et copier sans ecraser
Bonjour ,
J ' aimerais adapter la commande suivante :
find / -name "a*" -exec cp -f -r {} /tmp \; -print , qui recherche les fichiers et les copie vers un emplacement determiné .
Mais je suis en possession de plusieurs supports ( disques durs , cd , dvd ) , qui peuvent contenir sur plusieurs sources le ou les mêmes fichiers .
j ' aimerais que lors de la copie si un fichier existant portant le même nom il ne soit pas écrasé , mais que le "nouveau" fichier trouvé soit , et copié en modifiant son nom , par exemple en lui ajoutant _a , _b ,_c , ou _1 , _2 , 3_ etc .... , à la fin du nom du fichier et avant l ' extension ,
ce qui me donnerait une liste de fichiers dans le genre
dsc_1234.jpg
dsc_1234_a.jpg
dsc_1234_b.jpg
Idée , suggestion , tout est bienvenu ! Merci , jl avec un d
Hors ligne
#2 Le 07/12/2011, à 16:19
- Vlam
Re : chercher , trouver et copier sans ecraser
Bonjour, je vois deux solutions pour toi :
Faire un script (avec du find et du cp, ça ira très bien)
trouver un script qui le fait déja et qui te convient
Je n'ai pas cela en magasin, désolé !
Tu sais faire un peu de scripts/programmation ou pas du tout?
Dans la négative, on devra te trouver le script qui va bien
Dernière modification par Vlam (Le 07/12/2011, à 16:22)
« Doutez de tout et surtout de ce que je vais vous dire. »
Hors ligne
#3 Le 07/12/2011, à 16:41
- Levi59
Re : chercher , trouver et copier sans ecraser
Un petit bout de code issu d'un de mes scripts :
[ -f "/CheminVers/NouveauFichier.ext" ] && {
b=1
while [ -f "/CheminVers/NouveauFichier_$b.ext" ] ; do ((b++)) ; done
Dest="/CheminVers/NouveauFichier_$b.ext"
} || Dest="/CheminVers/NouveauFichier.ext"
En gros, je vérifie que là ou je copie le fichier, il n'existe pas un autre fichier du même nom. Si oui, je change le nom en mettant un numéro mais je vérifie que ce nom de fichier n'existe pas. Si oui, j'incremente $b jusqu'à trouver un nombre non utilisé.
Hors ligne
#4 Le 07/12/2011, à 17:56
- jeanlucd
Re : chercher , trouver et copier sans ecraser
merci pour les réactions rapides !
@Vlam : faire un script , mission impossible pour moi , aucunes notions de programmation , c ' est deja galere pour modifier une ligne de commande ... Une idée ou je pourrais dégoter cela ? N ' est il pas possible de modifier la ligne de commande donnée en exemple ?
@Levi59 : désolé mais tout ton code est incomprehensible pour moi , que faire avec cela , comment faire ?
Hors ligne
#5 Le 07/12/2011, à 18:08
- Vlam
Re : chercher , trouver et copier sans ecraser
merci pour les réactions rapides !
@Vlam : faire un script , mission impossible pour moi
Ok pas de soucis
Deux adresses pour toi :
minicopier (je ne sais pas si ça gère le renommage, à toi de fouiller))
Le sujet sur lincopier, à défaut d'utiliser directement le logiciel tu tomberas sur des experts en copie (évites juste de polluer leur topic)
« Doutez de tout et surtout de ce que je vais vous dire. »
Hors ligne
#6 Le 07/12/2011, à 18:34
- Levi59
Re : chercher , trouver et copier sans ecraser
C'est pour gérer l'emplacement où copier le fichier, plus précisemment son nom :
Si tu veux copier "fichier.ext" dans un dossier ou il y a déjà "fichier.ext" et "fichier_1.ext" alors le script renommera en "fichier_2.ext" pour ne pas écraser les anciens fichiers.
Le plus simple c'est de l'incorporer dans une boucle while :
#!/bin/bash
Dest="/chemin/vers/dossiers/ou/copier" ##Exemple : Dest="/tmp/dossierX"
[ -d "$Dest" ] || mkdir -p "$Dest" ### créer le dossier si il n'existe pas
while read FilePath
do
## découper le nom du fichier pour faciliter le traitement
File="${FilePath##*/}" ## si $FilePath vaut "/media/cdrom/truc.jpg", il devient "truc.jpg"
FileSsExt="${File%.*}" ## si $File vaut "truc.jpg", $FileSsExt devient "truc"
FileExt="${File##*.}" ## si $File vaut "truc.jpg", $FileExt devient "jpg"
[ -f "$Dest/$File" ] && { ## On vérifie si un fichier du même nom existe
b=1
while [ -f "$Dest/$FileSsExt_$b.$FileExt" ] ; do ((b++)) ; done ## Si oui on incrémente $b jusqu'à trouver un nom de fichier disponible
NewPath="$Dest/$FileSsExt_$b.$FileExt" ## et on enregistre le nouveau non
} || NewPath="$Dest/$File" ## Sinon on conserve le même nom
cp "$FilePath" "$NewPath" ## et on copie
done < <(find /media -type f -iname "*.jpg") #remplace "*.jpg" par le filtre dont tu as besoin
Il te suffit de copier ceci dans un fichier teste avec gedit, de l'enregistrer où tu le souhaites, puis de le rendre executable (chmod +x "/chemin/versle/script.sh")
Tu pourras alors le lancer en console ou via nautilus.
Hors ligne
#7 Le 07/12/2011, à 19:25
- AnsuzPeorth
Re : chercher , trouver et copier sans ecraser
Bjr,
L'option --backup de cp ne fait pas l'affaire ???
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne