Вопрос: Как скопировать путь к каталогу сохранения файлов в Linux?


У меня есть проекты Eclipse и «.project» в них, структура каталогов выглядит так:myProject/.project». Я хочу скопировать эти файлы .project в другой каталог, но я хочу, чтобы имя вложенного каталога сохранялось.

Предположим,a/myProject/.project', Я хочу скопировать'myProject/.project'to'b', так что это'b/myProject/.project', но 'b/myProject'не существует. Когда я пытаюсь:

 cp -r ./myProject/.project ../b

он копирует только сам файл .project, без каталога myProject. Пожалуйста, порекомендуйте.


69
2017-09-14 07:52


Источник




Ответы:


Вам нужен переключатель --parents, например:

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

121
2017-09-14 08:34





Вы также можете использовать rsync -R, который работает на OSX, где cp --parents не доступно.

https://stackoverflow.com/a/13855290/598940


11
2017-12-24 05:22





использование tar с чем-то вроде:

mkdir b; tar cpf - myProject/ | tar xpf - -C b/

(Не тестировалось. Сначала дайте ему сухой прогон или попробуйте выполнить макет.)


6
2017-09-14 08:39



работает на удивление хорошо! На mac: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP - текстовый файл со списком копируемых файлов в файлы - alexey


Первое использование mkdir -p для создания целевой папки с рекурсивным созданием родительского пути. Затем скопируйте содержимое в папку назначения:

mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project

4
2018-06-02 22:59





cp -P a/myProject/.project b

Видеть man cp Чтобы получить больше информации.


3
2017-09-14 08:06



Это, похоже, не помогает. Он только копирует сам «.project» в b, но не копирует «myProject». - dhblah


Я использую cpio в сочетании с find. Объяснение здесь,

Пример для вашего случая использования:

find /a/myProject/.project/ -type f | cpio -p -dumv /b/.

Эта команда находит все файлы в /a/myProject/.project/ и копирует, сохраняя путь, любые файлы, содержащиеся внутри.


2
2018-03-17 09:40



.project - это файл, а не каталог! - ddbug


Дополнительно к --parents необходимо также добавить -r , чтобы избежать опускания копии большинства внутренних каталогов

$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’

Итак, команда, которая работает для меня,

$ cp --parents -r test/1/.moo test2/

1
2017-07-29 19:59





Имейте в виду, что в cp --parents, Когда я использовал --parents вместе с --preserve=all, атрибуты даты и времени НЕКОТОРЫХ каталоги назначения НЕ сохранены.

Следующая ссылка, похоже, подтверждает, что это ошибка: ошибка # 8767: cp: --preserve = все не работает для родителей, когда --parent используемый,

Таким образом, похоже, что вы не можете полагаться на сохраняемые атрибуты при использовании --parents наряду с такими, как --preserve=all или -p,


0
2017-10-15 11:38





я использовал --parents с cp и работал со мной. для получения дополнительной информации всегда используйте руководство. Спасибо.


-3
2018-05-15 07:44



Ничего не добавляет к другим 5 ответам. - Deer Hunter
Отметим, что .project в Eclipse - это файл, а не каталог. Так, например, mkdir -p a / .project не имеет смысла. - ddbug