Как скопировать файл, сохраняющий путь к каталогу в Linux?

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

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

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

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

9 ответов

Решение

Переключатель вам нужен --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

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

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

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

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

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

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

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

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

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

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

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

cp -P a/myProject/.project b

Увидеть man cp для дополнительной информации.

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

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

Так что команда, которая работает для меня это

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

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

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

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

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

Другие вопросы по тегам