--w-------
권한이 200인 일부 파일이 포함된 디렉터리 트리가 포함된 파일 특성을 유지하면서 디렉터리를 반복적으로 복사하고 싶습니다 .
복사 명령은 cp -ar sourcedirectory targetdirectory
이러한 파일을 건너뛰며 각 파일은 다음과 같습니다.
cp: cannot open `sourcedirectory/foo/somefile.bar' for reading: Permission denied`
내 질문: 권한을 변경하지 않고 복사 명령이 이러한 파일을 건너뛰는 것을 방지하려면 어떻게 해야 합니까?
cp
복사 명령 이외의 유틸리티를 사용해야 한다고 생각한다면 그 이유를 설명해 주세요.
답변1
파일을 복사하려면 파일을 읽을 수 있도록 설정해야 합니다. 이는 도구 선택과 관련이 없습니다. 파일을 읽을 수 있는 권한이 없기 때문에 모든 프로그램이 파일을 열어 읽을 수 없습니다.
만약에ACL활성화되어 있고(ext2/ext3/ext4의 경우 마운트 옵션이 필요함 acl
) 복사에 관심이 없다면 복사를 수행하는 사용자가 파일을 읽을 수 있도록 허용하는 ACL을 추가하십시오.
setfacl -R -m u:username:rX sourcedirectory
그렇지 않으면 파일 권한을 미리 변경하고 나중에 복원하거나(양쪽 모두) 루트로 복사해야 합니다.
답변2
이 페이지가능한 한 많은 메타데이터를 유지하면서 데이터를 복사하는 다양한 방법을 제공합니다. 각각 시도해 볼 수 있으며,루트 사용자로:
cp -av /source /dest
# 사용하지 마세요-r
. 동작을 예측하기 어렵고-a
포함되어 있습니다.-R
cd /source; tar -cf- . | tar -xvpf- -C /dest
cd /source; find . -depth -print0 | cpio -pdmv -0 /dest
rsync -av --delete --hard-links /source/ /dest
/
Rsync는 인수에 s가 뒤에 오는 경우 약간 까다롭습니다. 매뉴얼 페이지에 설명된 대로 두 방법 모두 디렉토리를 다음 /source/foo
위치에 복사합니다 /dest/foo
.
rsync ... /source/foo /dest
rsync ... /source/foo/ /dest/foo
이들 중 어느 것도 작동하지 않을 수 있습니다. 시험해 보는 동안 최고의 잠재 고객을 찾으십시오.
답변3
내가 아는 한, 아래 단계에 따라 권한을 그대로 유지하고 모든 파일을 복사할 수 있습니다.
$ cd <sourcedirectory>
$ tar -cvf <sourcedirectory.tar> .
$ cp <sourcedirectory.tar> <destinationdirectory>
$ tar -xvf <sourcedirectory.tar>