Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 :

  1. Faire un script (avec du find et du cp, ça ira très bien)

  2. 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 smile

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 !   wink
@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

jeanlucd a écrit :

merci pour les réactions rapides !   wink
@Vlam : faire un script , mission impossible pour moi

Ok pas de soucis smile

Deux adresses pour toi :

  1. minicopier (je ne sais pas si ça gère le renommage, à toi de fouiller))

  2. Le sujet sur lincopier, à défaut d'utiliser directement le logiciel tu tomberas sur des experts en copie (évites juste de polluer leur topic) smile


« 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