Linux: acl 세트가 있는 모든 파일을 찾는 쉽고 우아한 방법은 무엇일까요?

Linux: acl 세트가 있는 모든 파일을 찾는 쉽고 우아한 방법은 무엇일까요?

acl이 설정된 모든 파일을 찾고 싶습니다. 나는 이 더러운 해결책을 알고 있습니다: dir에 acl이 설정된 모든 파일을 찾으려면. /등

 sudo ls -lhR /etc|grep +

누군가 더 우아한 솔루션을 알고 있습니까?

답변1

+쉽고 우아하다는 것은 달성하기 매우 높은 기준이며 파일 이름이 포함된 경우(예: C++) 더티 솔루션은 실패합니다 .

대안은 getfaclACL이 없는 파일을 반복적으로 건너뛰는 것 입니다.

getfacl -Rs /your/dir | grep "# file:"

그러면 파일이 나열되고 grep은 파일 이름만 유지합니다.

답변2

와 함께sfind또는 find내장bosh쉘은 단지 :

sfind . -acl
bosh -c 'find . -acl'
-acl The primary evaluates as true if  the  file  has  addi-
     tional  ACLs defined.  On platforms that do not support
     ACLs or where sfind does not yet support ACLs, the pri-
     mary   always   evaluates  as  false.   Currently  only
     Solaris, Linux and FreeBSD is supported.

sfind및 모두 bosh다음의 일부로 배송됩니다.Schily 도구.

비슷한 것을 얻으려면getfacl일반적으로 GNU 시스템에서 발견되는 명령, 구축 중에두아르도의 대답, 우리는 다음과 같이 파일 필드(여기서 표현과 as getfacl로 일부 바이트 값을 인코딩함 )를 디코딩해야 합니다.\ooo\\\

getfacl -Rs  . | perl -nle '
  if (/^# file: (.*)/) {
    print $1 =~ s{\\(\\|[0-7]{3})}{
      $1 eq "\\" ? "\\" : chr oct $1}ger
  }'

find여기서는 '을 사용할 수 없으므로 해당 파일 목록으로 작업을 수행하려면 -execNUL로 구분된 목록을 인쇄해야 합니다.

getfacl -Rs  . | perl -nl0e '
  if (/^# file: (.*)/) {
    print $1 =~ s{\\(\\|[0-7]{3})}{
      $1 eq "\\" ? "\\" : chr oct $1}ger
  }'

따라서 예를 들어 (zsh) 또는 (bash 4.4+)를 xargs -r0 some-command사용하여 배열에 파이프하거나 저장할 수 있습니다 .array=( ${(0)"$(cmd)"} )readarray -td '' < <(cmd)

관련 정보