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 28/12/2006, à 23:59

Archaon59

Script pour copie avancée

Salut à tous !
Sous ce titre qui en dit peu, je cherche un script qui pourrait faire la chose qui suit :

Copier des fichers d'un type (par exemple des .jpg), ce, en masse, récursivement, en gardant la structure dans le répertoire d'arrivée, seulement si ces répertoires existent (houlà)

Par exemple, j'ai un dossier Mes Images, dont je veux copier les .jpg en gardant l'arborescence :
|Mes Images
  |-Photos Vacances
    |-Plage
      |-photo1.jpg
      |-photo2.png
    |-Montagne
      |-photo1.png
      |-photo2.jpg

Et une clée USB Media, qui contient déjà
|Mes Images
  |-Photos Vacances
     |-Plage
       |-photo9.jpg

Je veux arriver à un truc comme ça sur Media
|Mes Images
  |-Photos Vacances
     |-Plage
       |-photo9.jpg
       |-photo1.jpg

J'espère avoir été assez clair, j'espère qu'un scripteur pourra m'aider smile !

Merci d'avance !


"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !"
-Albert Einstein

Hors ligne

#2 Le 29/12/2006, à 19:00

gapz

Re : Script pour copie avancée

Moi je vois bien un truc qui ferais :

Tu copies tout les fichiers vers un autre endroit avec un cp -r
Tu supprimes ceux du type que tu veux avec un find -name *.truc -exec rm -f {} \;


Real programmers code in binary :: http://gapz.tuxfamily.org

Hors ligne

#3 Le 29/12/2006, à 19:20

ggetalle

Re : Script pour copie avancée

# Disons que les images source se trouvent dans /home/Mes Images
#     et que la destination soit /medais/usbdisk/Mes Images

# Attention, Il faut mettre des -->"<-- entre Mes Images car il y a un espace dans le texte
cd /home/"Mes Images"

# On demande à la commande find de ne rechercher que les fichiers (-type f)
# qui se terminent par .jpg en minuscules
# le résultat est transféré à la commade cpio qui copie les fichiers trouvés
# en gardant les droits linux d'origine
find . -type f -name "*.jpg" | cpio -dump /media/usbdisk/"Mes Images"


Gérard cool

Hors ligne

#4 Le 29/12/2006, à 20:16

figaro

Re : Script pour copie avancée

cp -ruv ~/dossiersource  /media/CL_USB/dossierdestination

Devrait faire ton bonheur. smile

dossiersource  avec son chemin complet, idem pour dossier destination.

Dernière modification par figaro (Le 29/12/2006, à 21:26)


Le blog de figaro (astuces diverses et tutos Samba pour débutants)
Le blog de cep (astuces Linux avancées)
Debian Lenny 6.0.1, Ubuntu 10.04.2, Ubuntu Remix 9.10, Ubuntu Netbook 10.04

Hors ligne

#5 Le 31/12/2006, à 01:12

Archaon59

Re : Script pour copie avancée

Merci ggetall, ta commande est presque parfait, j'écris bien presque car il va me créer les dossiers s'ils n'existent pas, or je veux juste un transfert, pas de création (je suis paresseux, mais bon la ligne de commande c'est fait pour ça lol !) .

figaro, je ne comprend pas très bien ta commande, tu pourrais approfondir ?

En tout cas merci beaucoup pour vos réponses ! Encore une petite chose et c'est magnifique (c'est déjà très beau cool !) !


"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !"
-Albert Einstein

Hors ligne

#6 Le 31/12/2006, à 05:18

Mifrey

Re : Script pour copie avancée

Archaon59 : un moyen de résoudre ton problème est de profiter du fait que « cp » ne crée pas un répertoire de destination s'il n'existe pas.

Par exemple,

cp $REPERTOIRE_SOURCE/Photos\ Vacances/Montagne/photo2.jpg $REPERTOIRE_DESTINATION/Photos\ Vacances/Montagne/photo2.jpg

ne fonctionnera pas car le répetoire « $REPERTOIRE_DESTINATION/Photos\ Vacances/Montagne/ » n'existe pas.

Il ne reste plus qu'à répéter cette commande sur tous les fichiers jpg :

cd $REPERTOIRE_SOURCE
find . -type f -iname '*.jpg' -exec cp -uv {} $REPERTOIRE_DESTINATION/{} \;

Hors ligne

#7 Le 31/12/2006, à 09:01

figaro

Re : Script pour copie avancée

Archaon59 a écrit :

figaro, je ne comprend pas très bien ta commande, tu pourrais approfondir ?

Cela copiera tout le contenu de dossiersource y compris les sous répertoires dans le dossierdestination qui se trouve sur la clé USB de façon récursive en faisant uniquement la mise à jour (cela ne recopiera pas des fichiers qui y sont déjà s'ils n'ont pas été modifiés) et avec affichage à l"écran des opérations effectuées.

Si tu veux que dossierdestination porte le même nom tu ne mets rien, cela se fera automatiquement. Pour Linux tout est fichier pour contredire Mifrey : cp créera le répertoire.

PS: normalement la clé usb se monte automatiquement dans /media/CL_USB . Si c'est différent sur ton PC tu remplace /media/CL_USB par le dossier de montage de ta clé USB.

Dernière modification par figaro (Le 31/12/2006, à 09:01)


Le blog de figaro (astuces diverses et tutos Samba pour débutants)
Le blog de cep (astuces Linux avancées)
Debian Lenny 6.0.1, Ubuntu 10.04.2, Ubuntu Remix 9.10, Ubuntu Netbook 10.04

Hors ligne

#8 Le 31/12/2006, à 12:20

Archaon59

Re : Script pour copie avancée

Donc, ta commande, je devrai peut être la faire après un

find . -type f -name "*.jpg" | cpio -dump /home/archaon/Temp

pour avoir un dossier temp avec uniquement des .jpg, puis ta commande, qui donnera cela chez moi :

cp -ruv ~/Temp  /media/usbdisk/dossierdestination

J'essaye cela et je vous dis quoi .
Sinon vous n'avez pas un site expliquant la création d'un script ? Je voudrai adapter toutes les commandes ici pour les avoir avec un clic droit .


"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !"
-Albert Einstein

Hors ligne

#9 Le 31/12/2006, à 14:50

figaro

Re : Script pour copie avancée

Archaon59 a écrit :

Donc, ta commande, je devrai peut être la faire après un

find . -type f -name "*.jpg" | cpio -dump /home/archaon/Temp

pour avoir un dossier temp avec uniquement des .jpg, puis ta commande, qui donnera cela chez moi :

cp -ruv ~/Temp  /media/usbdisk/dossierdestination

J'essaye cela et je vous dis quoi .
Sinon vous n'avez pas un site expliquant la création d'un script ? Je voudrai adapter toutes les commandes ici pour les avoir avec un clic droit .

je pense que tu peux faire directement :

find . -type f -name "*.jpg" | cpio -dumpv /media/usbdisk/dossierdestination

Seul défaut les fichiers du dossierdestination peuvent être écrasés par de plus anciens du dossiersource.

Avec le v tu suivras ce qui se passe dans le terminal. smile


Le blog de figaro (astuces diverses et tutos Samba pour débutants)
Le blog de cep (astuces Linux avancées)
Debian Lenny 6.0.1, Ubuntu 10.04.2, Ubuntu Remix 9.10, Ubuntu Netbook 10.04

Hors ligne