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 18/10/2017, à 14:06

qolepam

copie avec création de dossier

bonjour,

Travaillant sous Ubuntu 14.04 LTS,j'ai l'habitude de sauvegarder les données du disque dur en faisant:
find chemin1 -mindepth 0 -exec cp '{}' chemin2 \;
Dans ce cas,tous les fichiers du chemin1 sont copiés dans le chemin2

C'est bien mais pas suffisant car si chemin1 comporte par exemple:
dossier1
dossier2
les dossiers1 et 2 ne sont pas recrées dans la copie vers chemin2 bien que tous leurs fichiers y sont copiés.

Y a-t-il une bonne syntaxe en ligne de commande pour cela?


merci de votre aide

Hors ligne

#2 Le 18/10/2017, à 14:29

bruno

Re : copie avec création de dossier

Bonjour,

Quelle drôle d'idée…
Pourquoi ne pas utiliser tout simplement cp de manière récursive (-r) ou rsync ? Exemples :

cp -r chemin1/. chemin2/
rsync -av chemin1/ chemin2/

Hors ligne

#3 Le 18/10/2017, à 17:43

qolepam

Re : copie avec création de dossier

effectivement ça marche avec cp -r mais il reste un hic:
supposons que dossier1 contienne  un sous-dossier Sdossier1 qui lui contient un sous-dossier SSdossier1 qui contient un fichier fichier1
La commande find chemin1 ...-exec cp -r...va copier  dans chemin2:
dossier1 et son contenu Sdossier contenant fichier1:c'est le but de ma question!
mais copie en trop et à côté:
-Sdossier1 contenant son fichier1
-fichier1
c'est pas bon!

Hors ligne

#4 Le 18/10/2017, à 18:16

bruno

Re : copie avec création de dossier

Je n'ai rien compris…
Les commandes que j'ai proposé copient l'intégralité de chemin 1 dans chemin2 en reproduisant toute l'arborescence.

Ta commande copie tous les fichiers de chemin1 et des éventuels sous-dossiers dans chemin2 sans reproduire l'arborescence.

Hors ligne

#5 Le 18/10/2017, à 18:29

qolepam

Re : copie avec création de dossier

j'ai dit que cette commande copie en trop des dossiers et fichiers
Je ne sais comment remédier à ce trop

Dernière modification par qolepam (Le 18/10/2017, à 18:32)

Hors ligne

#6 Le 18/10/2017, à 18:41

Zakhar

Re : copie avec création de dossier

qolepam a écrit :

La commande find chemin1 ...-exec cp -r...va copier  dans chemin2:

Non, mais la commande de Bruno tu la tapes sans le find devant... sinon c'est effectivement un gros boxon !..


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne

#7 Le 21/10/2017, à 15:20

qolepam

Re : copie avec création de dossier

résolu
il fallait me répondre:
find chemin1 -mindepth 0 -exec cp  --parent '{}' chemin2 \;

Hors ligne

#8 Le 22/10/2017, à 13:55

Zakhar

Re : copie avec création de dossier

Alors explique nous la différence :

$ find source -mindepth 0 -exec cp  --parent '{}' backup1 \;
cp: omission du répertoire 'source'
cp: omission du répertoire 'source/dirA_lvl1'
cp: omission du répertoire 'source/dirA_lvl1/dirB_lvl2'

$ cp -r source backup2

$ tree source backup*
source
├── dirA_lvl1
│   ├── dirB_lvl2
│   └── fileC_lvl2
├── fileA_lvl1
└── fileA_lvl2
backup1
└── source
    ├── dirA_lvl1
    │   └── fileC_lvl2
    ├── fileA_lvl1
    └── fileA_lvl2
backup2
└── source
    ├── dirA_lvl1
    │   ├── dirB_lvl2
    │   └── fileC_lvl2
    ├── fileA_lvl1
    └── fileA_lvl2

A part que avec find:
- tu te prends un message d'erreur à chaque sous-répertoire
- c'est beaucoup plus long (et compliqué à taper) que cp -r
- les répertoires vides ne sont pas copiés (cf messages d'erreur)

Donc effectivement, si ton besoin était : copier l'intégralité sauf les répertoires vides... oui tu as la bonne commande. tongue

Le besoin était donc mal exprimé... ou alors tu es adepte du "pourquoi faire simple quand on peut faire compliqué" !

CQFD

Dernière modification par Zakhar (Le 22/10/2017, à 14:00)


"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)

Hors ligne