#1 Le 18/10/2017, à 13: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, à 13: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/
#3 Le 18/10/2017, à 16: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, à 17: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.
#5 Le 18/10/2017, à 17: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, à 17:32)
Hors ligne
#6 Le 18/10/2017, à 17:41
- Zakhar
Re : copie avec création de dossier
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, à 14: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, à 12: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.
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, à 13:00)
"A computer is like air conditioning: it becomes useless when you open windows." (Linus Torvald)
Hors ligne