cp -rp를 잊어버린 경우에만 소유권을 수정합니다.

cp -rp를 잊어버린 경우에만 소유권을 수정합니다.

/data복사하는 데 저녁 시간이 걸리는 수많은 파일과 폴더가 있는 폴더가 있습니다 .

cp -r /data/* /data2 잊어버려서 루트로 복사했습니다.p

목적지에 있는 모든 것은 루트의 소유입니다.

소스코드를 삭제하지는 않았지만 /data필요하지 않으면 다시 복사하고 싶지 않습니다.

소스와 대상 간에 권한을 복사하거나 동기화하는 방법이 있습니까?

답변1

mtree이렇게 하면 파일 내용을 전혀 읽을 필요가 없다는 이점이 있습니다. 파일 메타데이터만 비교하고 소스와 일치하도록 대상을 수정합니다.

$ sudo mtree -cp /data | sudo mtree -Utp /data2

-cLHS에게 mtreepath 를 루트로 하는 계층 사양을 생성하도록 지시하고 -p, RHS는 /datapath 를 루트로 하는 계층의 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것이 더 나을 수 있습니다 .

관련 정보