Как скопировать файл, сохраняющий путь к каталогу в 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
не доступно
Использование 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
Команда и работал отлично со мной. для более подробной информации всегда используйте руководство. Спасибо.