조회 결과에서 사용자 그룹을 제외하고 싶습니다. 그들은 동일한 Unix 그룹에 속하지 않습니다. 이것이 최선의 방법은 아닙니다. 그렇죠?
find . -maxdepth 1 -type d -name '*_pattern_*' ! -user user1 ! -user user2 ...
사용자를 문자열이나 배열로 전달할 수 있나요? 어쩌면 awk를 사용할 수도 있나요?
답변1
find
cshell에서는 다음과 같이 작업을 실행하는 명령을 함께 모을 수 있습니다 .
#!/bin/tcsh -f
# persona non grata
set png = ( \
user1 \
user2 \
user3 \
user4 \
)
# build dynamically a portion of the `find` command
set cmd = ( `printf '! -user %s\n' $png:q` )
# now fire the generated find command
find . -maxdepth 1 -type d -name '*_pattern_*' $cmd:q
답변2
이스케이프 처리되지 않은 느낌표가 마음에 들지 않는다는 사실 외에도 csh
명령줄에서 명령은 괜찮아 보이고 더 이상 수행할 수 없습니다.
답변3
스크립트에서 실행하고 싶다면 다음을 수행하세요 /bin/sh
.
#!/bin/sh
# the users to avoid
set -- user1 user2 user3 user4
# create a list of
# -o -user "username" -o -user "username" etc.
for user do
set -- "$@" -o -user "$user"
shift
done
shift # remove that first "-o"
# use the created array in the call to find
find . -maxdepth 1 -type d -name '*_pattern_*' ! '(' "$@" ')'
또는 ! -user "username"
사용 중인 것과 동일한 유형의 목록을 작성하십시오.
#!/bin/sh
# the users to avoid
set -- user1 user2 user3 user4
# create a list of
# ! -user "username" ! -user "username" etc.
for user do
set -- "$@" ! -user "$user"
shift
done
# use the created array in the call to find
find . -maxdepth 1 -type d -name '*_pattern_*' "$@"