J'ai des projets Eclipse et un fichier ".project", la structure du répertoire ressemble à 'myProject/.project
'. Je veux copier ces fichiers '.project' dans un autre répertoire, mais je veux que le nom du répertoire qui l'entoure soit conservé.
Disons que j'ai 'a/myProject/.project
', Je veux copier' myProject/.project
'à' b
', donc ce sera' b/myProject/.project
', mais 'b/myProject
'n'existe pas. Quand j'essaye dans un:
cp -r ./myProject/.project ../b
il copie uniquement le fichier '.project' lui-même, sans le répertoire 'myProject'. S'il vous plaît donnez votre avis.
Le commutateur dont vous avez besoin est --parents
, par exemple.:
jim@prometheus:~$ cp --parents test/1/.moo test2/
jim@prometheus:~$ ls -la test2/
total 42
drwxr-xr-x 3 jim jim 72 2010-09-14 09:32 .
drwxr-xr-x 356 jim jim 43136 2010-09-14 09:32 ..
drwxr-xr-x 3 jim jim 72 2010-09-14 09:32 test
jim@prometheus:~$ ls -la test2/test/1/.moo
-rw-r--r-- 1 jim jim 0 2010-09-14 09:32 test2/test/1/.moo
Vous pouvez aussi utiliser rsync -R
, qui fonctionne sur OSX où cp --parents
n'est pas disponible.
Utilisez tar
avec quelque chose comme:
mkdir b; tar cpf - myProject/ | tar xpf - -C b/
(Non testé. Essayez-le d'abord à sec ou essayez dans un scénario de maquette.)
Première utilisation mkdir -p
pour créer le dossier de destination avec la création récursive du chemin parent. Copiez ensuite le contenu dans le dossier de destination:
mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project
cp -P a/myProject/.project b
Voir man cp
pour plus d'informations.
J'utilise cpio en combinaison avec find. Explication ici .
Exemple pour votre cas d'utilisation:
find /a/myProject/.project/ -type f | cpio -p -dumv /b/.
Cette commande trouve tous les fichiers dans /a/myProject/.project/
et copie, tout en préservant le chemin, tous les fichiers contenus dans celui-ci.
En plus de --parents
il est également nécessaire d'ajouter -r
option afin d'éviter d'omettre la copie de la plupart des répertoires internes
$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’
Donc, la commande qui fonctionne pour moi est
$ cp --parents -r test/1/.moo test2/
Veuillez noter qu'il semble y avoir un bogue dans cp --parents
. Quand j'ai utilisé --parents
de même que --preserve=all
, les attributs de date et d'heure de QUELQUES répertoires de destination n'ont PAS été conservés.
Le lien suivant semble confirmer qu'il s'agit d'un bug: bug # 8767: cp: --preserve = all ne fonctionne pas pour les parents lorsque --parent est utilisé .
Il semble donc que vous ne pouvez pas compter sur la préservation des attributs lors de l'utilisation de --parents
ainsi que --preserve=all
ou -p
.