find 명령에 -group 또는 -user 와일드카드 문자를 사용하십시오.

find 명령에 -group 또는 -user 와일드카드 문자를 사용하십시오.

예를 들어, 내 시스템에서 특정 이름으로 시작하는 모든 파일의 소유자를 찾으려고 합니다.

[unu@here findtest]$ find . -ls
17295583    0 drwxrwxr-x   2 unu      unu            74 Mar 28 03:14 .
17295584    0 -rw-rw-r--   1 br_asd1  br_asd1         0 Mar 28 03:13 ./test1
17295585    0 -rw-rw-r--   1 br_asd2  br_asd2         0 Mar 28 03:13 ./test2
17295586    0 -rw-rw-r--   1 unu      unu             0 Mar 28 03:13 ./test33
17295587    0 -rw-rw-r--   1 br_bfg1  br_bfg1         0 Mar 28 03:14 ./test11
17295588    0 -rw-rw-r--   1 unu      unu             0 Mar 28 03:14 ./test22

이름이 "br_"로 시작하는 사용자가 소유한 파일만 찾아야 합니다.

그래서 내가 시도한 것은

[unu@here findtest]$ find . -user "br_*" -ls
find: ‘br_*’ is not the name of a known user

이제 제가 찾은 방법은 awk를 사용하는 것이었지만 이 접근 방식에는 특정 문제가 있어서 제가 시도하는 작업에 실제로 유용하지 않습니다.

[unu@here findtest]$ find . -ls|awk '{if ($5 ~ "br_"||$6 ~ "br_") print $0}'
17295584    0 -rw-rw-r--   1 br_asd1  br_asd1         0 Mar 28 03:13 ./test1
17295585    0 -rw-rw-r--   1 br_asd2  br_asd2         0 Mar 28 03:13 ./test2
17295587    0 -rw-rw-r--   1 br_bfg1  br_bfg1         0 Mar 28 03:14 ./test11

-user찾기 나 옵션 에 와일드카드를 추가하는 방법이 있나요 -group?

답변1

작성하는 경우 bash배열을 사용하여 사용자 집합을 보유하고 다른 배열을 사용하여 find해당 사용자와 일치하는 해당 문법을 생성할 수 있습니다.

#!/bin/bash

# The beginning of the userids we need to match
match=br

# Find the matching set of users
users=($(
    getent passwd |
    awk -F: -vm="$match" 'BEGIN { re = "^" m } $1 ~ re {print $1}'
))

# Build the list of users ("find ( -user XX -o -user YY -o user ZZ ) ...")
finds=()
for user in "${users[@]}"
do
    finds+=('-o' '-user' "$user")
done
[[ ${#finds[@]} -gt 0 ]] && finds=('(' "${finds[@]:1}" ')')

# Execute the find command with the set of users
find . "${finds[@]}" -ls

언제나 그렇듯, find명령 앞에 이와 같은 것을 붙여서 echo무엇이 실행될지 확인할 수 있습니다. (또는 다음을 실행하여 bash -x라인별 디버깅 보고를 활성화할 수 있습니다.)

답변2

필요한 것이 목록뿐이라면 나는 좋은 오래된 grepover 의 출력을 사용하겠습니다 find. 속도는 느려지지만 타이핑 횟수는 훨씬 줄어듭니다.

가장 기본적인 경우에는 다음과 같이 시도해 볼 수 있습니다.

find -printf '%u %p\n' | egrep '^br_'

그러면 사용자가 소유한 파일 목록이 표시되며 br_*, 각 줄에는 사용자 이름과 파일 이름이 표시됩니다.

그런 다음 형식 문자열을 조정하여 출력을 확장할 수 있습니다 -printf .

예를 들어, 출력과 더 비슷하게 만들려면 다음을 수행하세요 ls.

find -printf '%-8.8u %-8.8g %M %8s %t %p\n' | egrep '^br_'

명령줄을 최대한 짧게 유지하는 데 중요한 점은 egreps 부분을 짧게 유지할 수 있도록 사용자 이름을 시작 부분에 넣는 것입니다.

형식 문자열에 지정할 수 있는 모든 항목을 보려면 다음으로 이동하세요.여기을 누른 다음 검색하세요 -printf format.

그러나 파일 이름에 개행 문자가 포함된 경우 이 솔루션에서는 이를 표시하는 데 문제가 있을 수 있습니다.

관련 정보