소유자와 권한을 그대로 유지 한 폴더를 어떻게 복사합니까?


379

따라서 홈 폴더를 다음과 같이 외장 드라이브에 복사하여 백업하려고했습니다.

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

결과적으로 외부 드라이브의 모든 폴더가 이제 소유하고 root:root있습니다. cp원본의 소유권과 권한을 유지하려면 어떻게해야 합니까?


23
네, 구글이 여전히 'man':-)보다 빠르기 때문에 그가 기뻐했습니다.
Stijn Geukens

3
나는 그가 너무
Ole

5
@StijnGeukens Google이 더 빠르지는 않지만 man나 조차도 비밀입니다. 이 경우 man에는 -r말합니다 same as --preserve=mode,ownership,timestamps. 원래 권한을 유지한다는 것을 어떻게 알 수 있었습니까?
Kolob Canyon

@KolobCanyon 당신이 의미하는 것-p
폭풍

답변:


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

cp 맨 페이지에서 :

 -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

129
사용하는 것이 훨씬 낫습니다 cp -a. 여기에는 또한 -recursive 플래그가 포함 되지만 그 이상을 수행하면 파일에 대한 모든 내용이 보존됩니다. SELinux 속성, 링크, xattr, 모든 것. "아카이브 모드"입니다. 이 백업을 만들기위한 더 나은 도구가 있지만 경우 사용중인 cp백업에 대한보다 다른 것을 사용하지 마십시오 cp -a.
와일드 카드

25
작동하지만 인내심이 좋습니다. 이 명령은 완료 될 때만 모든 것을 올바르게 설정합니다. 디렉토리를 복사하는 동안 루트로 cp를 실행하는 동안 디렉토리는 루트가 소유합니다. 이 디렉토리로 끝날 때만 올바른 권한으로 설정합니다.
Paul

4
cp -aOS X와 ​​같은 일부 시스템에서는 작동하지 않습니다 cp -pR. 내 현재 OS X 시스템 (10.10.15)에서는 cp -a영광으로 보입니다.
dubiousjim

내가 폴더 구조를 복사합니다은 cp -a를 사용하는 경우 사용 diff <(getfacl -R folder1) <(getfacl -R folder2)전 다른 액세스 제어 목록 :( 얻을 수가 창틀
philx_x을

왜 "cp -p"가 아닌 "cp -rp"입니까?
유진 카우 로프

94

을 사용할 수도 있습니다 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

후행 슬래시를 참고하십시오 (자세한 내용은 맨 페이지 참조).


4
+1 cp -p은 좋지만, 나는 rsync일반적으로에 대한 별칭 pcp을 가진 출력을 훨씬 더 좋아 합니다 time rsync --progress -ah. 내 마음 속에 "진보 복사"를 의미합니다. 그리고 둘 다 수락 -r하므로 일반적인 터미널 사용에는 잘 작동하지만 불행히도이 sudo질문 / 답변에 표시된 것과 조합되지는 않습니다 .
이즈 카타

15
NB : rsync -a는 확장 된 속성 ( -X)을 유지하지 않고 ACL ( -A)을 보존하지 않습니다 archive mode; equals -rlptgoD (no -H,-A,-X). 예를 들어 SELinux 컨텍스트가 없으면 보존되지 않습니다 -X. 많은 유스 케이스에서 이것은 괜찮지 만 시스템 파티션을 백업하면 -X가 없으면 상당히 많이 손상 될 수 있습니다. 내가 아는 한, cp -a모든 파일 속성을 실제로 유지합니다.
Perseids

2
방금 sudo cp -a소유권과 그룹 을 유지 하면서 sudo rsync -a루트로 변경 하면서 이것을 테스트했습니다 . 따라서 @Perseids가 정확합니다.
John Hamilton

3
@JohnHamilton Mint에서 이것은 완벽하게 작동합니다 ... 나중에 소유권과 그룹 만 변경합니다 (언제 말할 수는 없습니다). 방금 전체 /home폴더를 복사 rsync -aX /home /mnt/sdd/했으며 매력처럼 작동했습니다.
Olivier Pons

@JohnHamilton은 페르 세이 데스가 전혀 말한 것이 아닙니다.
user643011

60
cp -a

어디 -a를위한 짧은 --archive- 기본적으로 복사가 정확히 같은 디렉토리; 파일은 모든 속성을 유지하며 심볼릭 링크는 역 참조되지 않습니다 ( -d).

보낸 사람 man cp:

   -a, --archive
          same as -dR --preserve=all

21

내가 사용 cp -pdRx되는 -p모드, 소유권 및 타임 스탬프를 보존 -d, (그래서 당신은 심볼릭 링크 대신 복사 한 파일 내용을 얻을 수) 링크를 보존 -R재귀을하고 -x당신이 복사하는 경우에만 정말 유용합니다 (하나 개의 파일 시스템에 남아 /또는 활성 뭔가 마운트 지점 ).

추신 : -R대신에 -r사용하는 습관입니다 ls -lR.


2
cp -ax같은 것의 약간 짧은 버전입니다. 이것은 훌륭하게 작동했습니다-감사합니다!
EM0

실제로 차이가 -r-R. 매뉴얼 페이지를 확인하십시오 (특정 부분이 너무 길어서 여기에 인용되지 않았습니다).
geckon

2
나는 그것이 있다고 생각하지 않습니다 (한 번은 유닉스 버전이 있었을 수도 있지만 여전히있을 수 있습니다). 참조 man7.org/linux/man-pages/man1/cp.1.html 그것은 단순히 말한다 -R, -r, --recursive copy directories recursively.
StarNamer

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.

11

다음과 같이 할 수 있습니다 :

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

tar권한, 소유권 및 디렉토리 구조를 그대로 유지하지만 모든 것을 바이트 스트림으로 변환합니다. 디렉토리를 변경하는 "서브 쉘"(괄호로 묶은 명령)을 실행 한 다음 tar변환을 되 돌리십시오 . 바이트 스팀은 올바른 소유권과 권한을 가진 디렉토리와 파일이됩니다.


7

대답은 간단합니다. 권한을 유지 cp하는 -p옵션이 있습니다 (여기에는 물고기가 있습니다).

그러나 Wojtek이 그의 의견에서 말했듯이 man cp(좋은 매뉴얼을 읽는 것이) 좋은 출발점이 될 것입니다 (물고기를 배우는 방법을 배우고 싶습니까?).


1

preserve = all을 사용할 수 있으면 사본은 파일의 소유자, 그룹 및 타임 스탬프와 같은 모든 속성을 유지합니다. 따라서 다음 명령을 사용하여 안전하게 백업하십시오.

cp -r --preserve=all /home/my_home /media/backup/my_home
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.