it-swarm-ko.tech

다른 파일에서 소유권과 권한을 복제 하시겠습니까?

다른 파일에서 파일에 대한 사용자/그룹 소유권 및 권한을 복제하는 명령 또는 플래그가 있습니까? 파마와 소유권을 다른 파일과 정확히 일치 시키려면?

132
user394

GNU/Linux에서 chownchmod에는 --reference 옵션

chown --reference=otherfile thisfile
chmod --reference=otherfile thisfile
185
enzotib

GNU 유틸리티 (예 : 내장되지 않은) Linux 또는 Cygwin)가있는 유닉스에서는 chmod --referencechown --reference .

시스템에 ACLs 가 있으면 ACL 명령 getfaclsetfacl을 시도하십시오. 이러한 명령은 시스템마다 조금씩 다르지만 많은 경우 getfacl other_file | setfacl -bnM - file_to_change를 사용하여 권한을 복사 할 수 있습니다. 소유권을 복사하지 않습니다. 공백이 포함 된 사용자 또는 그룹 이름이 없다고 가정하면 ls -l other_file를주의해서 구문 분석하면됩니다.

LC_ALL=C ls -l other_file | {
  read -r permissions links user group stuff;
  chown -- "$user:$group" file_to_change
}
getfacl other_file | setfacl -bnM - file_to_change

Matteo :)의 응답을 기반으로 bash 명령 을 했습니까?

코드 :

chmod $( stat -f '%p' "$1" ) "${@:2}"

사용법 :

cp-permissions <from> <to>...

8
mjlescano

GNU의 chmod/chown (--reference 옵션을 지원하는) 시스템을 사용하지 않는 경우 ls -l의 출력을 구문 분석 할 수 있습니다.

여기에 chmod에 대한 작은 스크립트가 있습니다 (확장 정규식을 지원하는 것을 볼 수 있다면 훨씬 더 읽기 쉬운 방식으로 작성 될 수 있습니다 ...)

#!/bin/sh

reference=$1
shift
files=$*

# strip the permissions (whith extended regexes could be more readable)
OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/"       | sed -e "s/[-]//g" )
GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/"    | sed -e "s/[-]//g" )
OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" )

chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files}

업데이트 :

stat를 사용하면 훨씬 쉽습니다.

chmod $( stat -f '%p' ${reference} ) ${files}
5
Matteo

이것은 나를 위해 작동합니다 :

cp -p --attributes-only <from> <to>

0
user172554

Matteo 의 스크립트에 조정을 추가하고 싶었습니다. 파일에서 chmod 명령을 실제로 실행하기 전에 파일이 존재하는지 확인하려면 for 루프를 사용해야합니다. 이렇게하면 스크립트 오류가 더 정상적으로 나타납니다.

솔라리스, 리눅스 등과 같은 모든 * nix OS에 사용할 수 있기 때문에 이것이 최선의 선택이라고 생각합니다.

#!/bin/sh

reference=$1
shift
files=$*

for file in $reference $files; do
  [ -f $file ] || { echo "$file does not exist"; exit 1; }
done

# strip the permissions (whith extended regexes could be more readable)
OWNER=$(ls -l ${reference} | sed -e "s/.\(...\).*/\1/" | sed -e "s/[-]//g" )
GROUP=$(ls -l ${reference} | sed -e "s/....\(...\).*/\1/" | sed -e "s/[-]//g" )
OTHER=$(ls -l ${reference} | sed -e "s/.......\(...\).*/\1/" | sed -e "s/[-]//g" )

chmod u=${OWNER},g=${GROUP},o=${OTHER} ${files}

내 Solaris 10 시스템 중 하나에서 stat을 (를) 찾을 수 없음을 발견했습니다. 그래도 구성에 문제가있을 수 있습니다.

0
David