MacOS의 cp -r -l (하드 링크를 유지하는 재귀 복사본) 재귀 적으로 보존하여

하드 링크를 재귀 적으로 보존하여 디렉토리 트리를 파일에 복사하려고합니다. 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을 알고 있지만 암호화 된 디렉토리를 증분 백업하는 것은 적절하지 않습니다.



답변

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


답변

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

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


답변

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


답변

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


답변

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


답변