Назад | Перейти на главную страницу

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

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

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

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

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

Вам нужен переключатель --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
cp -P a/myProject/.project b

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

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

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

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

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

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