MacOS의 cp -r -l (하드 링크를 유지하는 재귀 복사본)


12

하드 링크를 재귀 적으로 보존하여 디렉토리 트리를 파일에 복사하려고합니다. gnu cp를 사용하면 -l 플래그와 함께 작동합니다. 그러면 cp는 디렉토리 구조를 다시 만들지 만 각 파일의 내용을 복사 할 필요는 없습니다.

이것은 백업의 예비 단계입니다. 먼저 이전 백업의 저렴한 (하드 링크 된) 사본을 만든 다음이 사본에서 소스 디렉토리를 rsync하고 싶습니다. 대충:

 cp -r -l yesterdays_backup todays_backup
 rsync -a source_dir todays_backup

불행히도 OSX의 cp는 -l 플래그를 지원하지 않습니다. cpio는 재귀 복사를 지원하지 않습니다. 다른 대안은 pax이지만 전체 디렉토리 구조가 복사됩니다.

 pax -rw backups/yesterdays_backup backups/todays_backup

변형 :

 yesterdays_backup
 |
  \source_dir (...)

에:

 todays_backup
 |
  \backups
          \yesterdays_backup
                            \source_dir(...)

이 작업을 수행하는 쉬운 / 분명한 방법이 있어야하지만, 나는 현재 혼란에 빠졌습니다 ... cpio와 pax에 대한 대안이 있습니까? gnu cp를 설치하지 않아도됩니다.

Timemachine을 알고 있지만 암호화 된 디렉토리를 증분 백업하는 것은 적절하지 않습니다.

mac  backup  rsync  cp 

(: CPIO과 함께 찾기를 사용하여 재귀 CPIO의 부족을 이겨내는 여기에 설명 된대로 mikerubel.org/computers/rsync_snapshots/#Incremental ...)하지만 수행은 매우 우아 같지

답변:


16

MacPorts에서 cp를 설치하는 것은 쉽지만, 휴대용 스크립트를 원하지 않거나 만들려는 경우 세 가지 옵션이 있습니다.

rsync

rsync --archive --link-dest=../yesterdays_backup backups/yesterdays_backup\
   backups/todays_backup

cpio

mkdir backups/todays_backup
cd backups/yesterdays_backup
find . -print | cpio -p -al ../todays_backup

팍스

mkdir backups/todays_backup
cd backups/yesterdays_backup
pax -rwl . ../todays_backup

소스와 대상이 다른 디스크에 있으면 어떻게됩니까? rsync가 대상에서 작성된 사본의 소스에서 하드 링크를 계속 유지합니까?
lpacheco

7

이름이 변경된 GNU 명령 이 포함 coreutilsMacPorts 에서 패키지를 쉽게 설치할 cpgcp있습니다.

그러나 OS X 10.5 버전을 포함하여 최신 버전의 rsync는 더 나은 --link-dest 옵션을 지원하므로 초기 cp -al이 필요하지 않습니다. 여기를 참조 하십시오 . 확장 된 속성, ACL 등을 복사하려면 -E 옵션도 사용하는 것이 좋습니다.


1

하지만 cpio직접 재귀 복사를 지원하지 않습니다, 당신은 당신이 표준 입력에 복사 할 파일의 정확한 목록을 공급하고, 사용 재귀 사본의 효과를 얻을 수 있습니다 find에 파이프를 cpio. 이것은 tar옵션과 함께 GNU를 사용하는 것과 직접적으로 유사합니다 -T -(즉, 표준 입력에서 백업 할 파일 목록을 읽습니다).


1

나는 당신이 원하는 것을 달성 할 수 있다고 생각합니다 ditto yesterdays_backup todays_backup. 기본적으로 ditto하드 링크, ACL 및 확장 된 속성을 유지하는 재귀 복사본을 수행합니다.


문제는 디렉토리 범위에서 하드 링크를 작성하는 것이 목표 일 때 사본이 더 이상 저렴하지 않다는 것입니다. ditto는 존재하는 경우 보존 할 수 있지만 복제본을 작성하는 대신 링크하도록 지시 할 수는 없습니다.
Florenz Kley

나는 디렉토리 하드 링크를 유지하기 위해 ditto가 들릴 수 있다고 생각하지 않습니다. man 페이지는 전용 파일 하드 링크를 난데
크리스 F 캐롤

0

폴의 답변 +1 ditto 는 옵션이지만 find와 함께 사용하는 경우에만 가능합니다. 하드 링크는 유지하지만 디렉토리 내부에서만 유지됩니다.

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