나는 사용하려고https://unix.stackexchange.com/a/315667/21372rsync를 사용하여 cp 버그에 대한 해결 방법이 있지만 제대로 작동하지 않습니다. 기본적으로 rsync
비슷한 접근 방식을 사용하여 파일이나 디렉터리를 반복적으로 복사 해야 rsync -a
하지만 일반적인 umask 조건을 사용하여 파일과 디렉터리를 생성해야 합니다. 그러나 단일 파일에 대해 이를 시도하면 해당 옵션을 지정하더라도 --no-perms
대상 파일에 대한 권한이 여전히 유지된다는 것을 알 수 있습니다.
bash-4.1$ cd /tmp
bash-4.1$ touch afile
bash-4.1$ chmod a-w afile
bash-4.1$ ls -ld afile
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile
bash-4.1$ rsync --copy-links --recursive --times --group --no-perms afile afile2
bash-4.1$ ls -ld afile*
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile
-r--r--r-- 1 theuser thegroup 0 Jul 24 16:50 afile2
bash-4.1$
afile2
내가 원하는 것은 일반 생성과 동일한 권한을 갖는 것입니다 .afile3
bash-4.1$ touch afile3
bash-4.1$ ls -ld afile3
-rw-rw-r-- 1 theuser thegroup 0 Jul 24 16:51 afile3
아래와 같이 "harsh"를 사용하여 명령을 찾을 수 있습니다.https://unix.stackexchange.com/a/315667/21372--no-perms
그러나 나는 rsync 옵션이 수행해야 한다고 생각하는 작업을 수행하기 위해 후속 find 명령의 오버헤드를 갖고 싶지 않습니다 .
이는 사용자 공간에서 작동해야 합니다(루트가 필요하지 않음).
이것은 rsync 버그입니까, 아니면 사용자 오류입니까?
관련된 운영 체제 및 rsync 버전은 다음과 같습니다.
bash-4.1$ lsb_release -r -i
Distributor ID: RedHatEnterpriseWorkstation
Release: 6.8
bash-4.1$ rsync --version
rsync version 3.0.6 protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, symtimes
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
bash-4.1$
답변1
rsync 매뉴얼 페이지에서:
새 파일에 대상 기본 권한을 부여하려면(기존 파일은 변경하지 않은 채) --perms 옵션이 꺼져 있는지 확인하고 --chmod=ugo=rwX를 사용하십시오(이렇게 하면 모든 마스크 해제 비트가 활성화됩니다).
그래서...
rsync --copy-links --recursive --times --group --no-perms --chmod=ugo=rwX afile afile2
...보여주신 예제 파일로 이 문제를 해결해야 합니다.
소스 파일에 777과 같은 권한이 있는 경우...
rsync --copy-links --recursive --times --group --no-perms --chmod=ugo=rw,-X afile afile2
...실행 가능 플래그를 제거합니다.
답변2
소유권과 권한이 저장되지 않은 디렉토리를 복사하고 특정 umask
. 또한 실행 가능한 비트를 유지하고 싶습니다(다른 권한은 없음). 읽으면서 man rsync
@cmerriman과 비슷한 결과를 얻었습니다.
rsync -rEltDHv --chmod=ugo=rwX src_dir/ dst_dir/
다른 답변과의 주요 차이점 중 하나는 -E
실행 비트가 보존된다는 것입니다. 그 외에는 magix는 --chmod=ugo=rwX
매뉴얼 페이지에서 제안한 대로 수행되는 것 같습니다.