Як скопіювати шлях до збереження файлів у Linux?


88

У мене є проекти Eclipse і файл ".project" у них, структура каталогу виглядає як " myProject/.project". Я хочу скопіювати ці файли '.project' в інший каталог, але я хочу, щоб ім’я, що додається, було збережено.

Скажімо, у мене є " a/myProject/.project", я хочу скопіювати " myProject/.project" в b", так це буде" b/myProject/.project", але" b/myProject"не існує. Коли я спробую:

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

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

Відповіді:


153

Вам потрібен перемикач --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


7

Використовуйте tarщось подібне:

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

(Не тестовано. Спершу дайте сухий пробіг або спробуйте в макетному сценарії.)


працює напрочуд добре! На mac: mkdir b; tar -c -f new.tar $ (cat myP); дьоготь -x -f new.tar -C b /; #myP - текстовий файл із переліком файлів, які потрібно скопіювати
alexey

4

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

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

3
cp -P a/myProject/.project b

Див. Для man cpотримання додаткової інформації.


Це, здається, не допомагає. Він лише копіює ".project" себе в b, але він не копіює "myProject".
dhblah

3

Я використовую cpio в поєднанні з find. Пояснення тут .

Приклад вашого випадку використання:

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

Ця команда знаходить усі файли /a/myProject/.project/та копіює, зберігаючи шлях, будь-які файли, що містяться в ньому.


1
.project - це файл, а не реж!
ddbug

1

Крім --parentsцього, потрібно також додати -rопцію, щоб уникнути пропуску копії більшості внутрішнього каталогу

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

Тож команда, яка працює для мене, така

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

0

Будь ласка, майте на увазі, що виявляється помилка cp --parents. Коли я використовував --parentsразом із цим --preserve=all, атрибути дати та часу у деяких каталогах призначення НЕ зберігалися.

Наступне посилання, схоже, підтверджує, що це помилка: помилка # 8767: cp: --preserve = все не працює для батьків, коли використовується --parent .

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


-3

Я --parentsз cpкомандою і працював perfeclty зі мною. для отримання детальної інформації завжди використовуйте посібник. Дякую.


3
Не додає нічого до інших 5 відповідей.
Мисливець на оленів

Відповідачі, зверніть увагу, що .project в Eclipse - це файл, а не каталог. Так, наприклад, mkdir -pa / .project не має сенсу.
ddbug
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.