
/data
복사하는 데 저녁 시간이 걸리는 수많은 파일과 폴더가 있는 폴더가 있습니다 .
cp -r /data/* /data2
잊어버려서 루트로 복사했습니다.p
목적지에 있는 모든 것은 루트의 소유입니다.
소스코드를 삭제하지는 않았지만 /data
필요하지 않으면 다시 복사하고 싶지 않습니다.
소스와 대상 간에 권한을 복사하거나 동기화하는 방법이 있습니까?
답변1
mtree
이렇게 하면 파일 내용을 전혀 읽을 필요가 없다는 이점이 있습니다. 파일 메타데이터만 비교하고 소스와 일치하도록 대상을 수정합니다.
$ sudo mtree -cp /data | sudo mtree -Utp /data2
-c
LHS에게 mtree
path 를 루트로 하는 계층 사양을 생성하도록 지시하고 -p
, RHS는 /data
path 를 루트로 하는 계층의 mtree
소유자/그룹/권한 -U
및 수정 시간 으로 업데이트를 호출합니다.-t
-p /data2
답변2
나는 다음을 사용할 것이다 rsync
:
rsync -avic --progress /data/ /data2
참고:
후행은 의도적 /
인 것이므로 그 아래의 모든 파일이 생성되거나 다시 복사되지 않도록 /data/
합니다 . ( 꼬리를 따를 필요는 없습니다 )rsync
/data2/data
/
/data2
옵션은 다음과 같습니다:
-a
"archive"의 이름을 따서 명명되었지만 실제로는 명령의 동작을 모방하는 유용한 옵션(예: 하위 디렉터리로 재귀적으로 내려가는 등)을 켭니다 cp -r
.
-v
그리고 -i
사본을 상세하게 만들고 rsync
복사된 파일의 권한과 소유권을 설정하는 방법을 보여줍니다. 이는 복사 과정에서 매우 유용합니다.
-c
체크섬을 사용하여 각 파일의 데이터를 복사해야 하는지 여부를 결정합니다. 이렇게 하면 rsync
파일 내용 복사를 건너뛰고 대상 파일의 소유권/권한만 조정합니다.
--progress
필수는 아니지만 파일 내용을 대상에 복사하는 진행 상황을 표시합니다.
-v
옵션을 사용하면 -i
각 파일이 터미널 창에서 최소한 한 줄 이상 스크롤됩니다. 이것을 원하지 않는다면 무시하십시오. rsync가 수행할 작업을 알려주는 세부적인 테스트 실행을 수행하지만 파일을 변경하지 않으려면 이를 추가할 수 있습니다 -n
(예:). 따라서 -avicn
해당 옵션을 시험적으로 실행 -avicn --progress
한 다음 해당 옵션을 사용하여 실행하는 -ac --progress
것이 더 나을 수 있습니다 .