Как скопировать папку, в которой владельцы и разрешения не сохранены?

Итак, я собирался создать резервную копию моей домашней папки, скопировав ее на внешний диск следующим образом:

sudo cp -r /home/my_home /media/backup/my_home

В результате все папки на внешних дисках теперь принадлежат root:root. Как я могу cp сохранить права собственности и разрешения от оригинала?

293 голоса | спросил Psachnodaimonia 20 J000000Friday12 2012, 19:27:33

7 ответов


356
sudo cp -rp /home/my_home /media/backup/my_home

Из cp manpage:

 -p     same as --preserve=mode,ownership,timestamps

 --preserve[=ATTR_LIST]
          preserve the specified attributes (default: mode,ownership,timestamps),
          if possible additional attributes: context, links, xattr, all
ответил guido 20 J000000Friday12 2012, 19:51:55
78

Вы также можете использовать rsync.

sudo rsync -a /home/my_home/ /media/backup/my_home/

На странице rsync:

 -a, --archive
              This  is  equivalent  to  -rlptgoD.  It  is a quick way of saying you want
              recursion and want to preserve almost everything (with -H being a  notable
              omission).    The   only  exception  to  the  above  equivalence  is  when
              --files-from is specified, in which case -r is not implied.

              Note that -a does not preserve hardlinks, because finding  multiply-linked
              files is expensive.  You must separately specify -H.

См. этот вопрос для сравнения между cp и rsync: https: //stackoverflow.com/q/6339287/406686

Обратите внимание на конечную косую черту (подробнее см. man-страницу).

ответил student 20 J000000Friday12 2012, 20:03:04
35
cp -a

Где -a является коротким для --archive - в основном он копирует каталог именно так, как есть; файлы сохраняют все свои атрибуты, а символические ссылки не разыменовываются (-d).

Из man cp:

   -a, --archive
          same as -dR --preserve=all
ответил Zaz 14 +03002015-10-14T03:38:55+03:00312015bEurope/MoscowWed, 14 Oct 2015 03:38:55 +0300 2015, 03:38:55
19

Я использую cp -pdRx, который будет сохранять режим сохранения -p, право собственности и amp; timestamps, -d сохранить ссылки (поэтому вы копируете символические ссылки, а содержимое файла копируется), -R делают это рекурсивно и -x остаются на одном файловой системы (только очень полезно, если вы копируете / или что-то с активной точкой монтирования).

PS: -R вместо -r является просто привычкой использовать ls -lR.

ответил StarNamer 20 J000000Friday12 2012, 20:17:55
14

cp имеет возможность сохранить права собственности на файл. На странице руководства cp:

-p    Cause cp to preserve the following attributes of each source file in the copy: modification
      time, access time, file flags, file mode, user ID, and group ID, as allowed by permissions.
      Access Control Lists (ACLs) and Extended Attributes (EAs), including resource forks, will also
      be preserved.
ответил Matteo 20 J000000Friday12 2012, 19:51:37
11

Вы можете сделать что-то вроде этого:

tar cf - my_home | (cd /media/backup; sudo tar xf - )

tar сохраняет права доступа, структуру собственности и каталога неповрежденными, но преобразует все в поток байтов. Вы запускаете «подоболочку» (команды в скобках), которые меняют каталог, а затем получают tar, чтобы отменить преобразование. Паром байтов становится директориями и файлами с правильной властью и разрешениями.

ответил Bruce Ediger 20 J000000Friday12 2012, 19:43:06
7

Ответ прост: cp имеет параметр -p, который сохраняет разрешения (вот рыба).

Но, как говорит Wojtek в своем комментарии, man cp (чтение прекрасного руководства) будет хорошей отправной точкой (хотите узнать, как ловить рыбу?).

ответил buckdeer 21 J000000Saturday12 2012, 06:26:27

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132