다음 사용 사례를 보여드리겠습니다.
[root@localCentOS71 folder]# ls -lah
total 16K
drwxr-xr-x 3 root root 4.0K Dec 22 08:52 .
drwxr-xr-x 4 root root 4.0K Dec 21 14:59 ..
-rw-r--r-- 1 root test 0 Dec 22 08:52 file
drwxr-xr-x 2 root root 4.0K Dec 21 14:59 hi
-rw-r--r-- 1 root root 0 Dec 22 08:46 .htaccess
-rw-r--r-- 1 root root 175 Dec 22 08:47 test
find
실행할 명령을 호출하려고 합니다 .
- 일반 파일만 찾기
- 소유자가 루트가 아닌 위치를 찾거나
- 검색 그룹이 루트가 아니거나
- 권한이 775가 아닌 곳도 찾아보세요
- .htaccess 파일 제외
현재 명령:
find /folder -not -user root -or -not -group test -type f \( ! -iname ".htaccess" \) -or -not -perm 775
원하는 출력:
/folder/test
/folder/file
실제 출력:
/folder
/folder/.htaccess
/folder/hi
/folder/test
/folder/file
답변1
-a
(생략된 경우 두 조건자 사이의 암시적 우선순위)가 앞에 있으므로 괄호 -o
를 사용해야 합니다.
find /folder ! -name .htaccess -type f \( \
! -user root -o ! -group test -o ! -perm 775 \)
또는:
find /folder ! -name .htaccess -type f ! \( \
-user root -group test -perm 775 \)
파일에 대한 작업이 -name
필요하지 않으므로 최적화를 위한 첫 번째 작업을 수행합니다 . lstat()
일부 find
구현에서는 자체적으로 최적화를 수행합니다(내부적으로 조건자 목록 재정렬).
-not
및 은 -or
비표준 GNU 확장입니다. 표준 동등물 !
입니다 -o
.
우선순위 규칙으로 인해
find /folder -not -user root -or -not -group test -type f \(
! -iname ".htaccess" \) -or -not -perm 775
실제로는 다음과 같이 해석될 수 있습니다.
find /folder \( -not -user root \) -or \
\( -not -group test -a \
-type f -a \
\( ! -iname ".htaccess" \) \
\) -or \
\( -not -perm 775 \)