Если вы пишете для 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
, чтобы включить отчет об отладке строки -по -.)