Como excluir múltiplos usuários do resultado do comando find em tcsh?

1

Eu quero excluir um grupo de usuários de encontrar resultados, eles não pertencem ao mesmo grupo unix, este não é o melhor caminho, certo?

find . -maxdepth 1 -type d -name '*_pattern_*' ! -user user1 ! -user user2 ...

Posso passar os usuários como uma string ou uma matriz? talvez com o awk?

    
por Shuman 26.06.2018 / 19:53

3 respostas

0

Em um cshell você pode preparar o comando find para executar o trabalho da seguinte forma:

 #!/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
    
por 29.06.2018 / 18:11
-1

Exceto pelo fato de que csh não gosta de um ponto de exclamação sem escape, na linha de comando, seu comando parece OK e não pode ser melhor

    
por 26.06.2018 / 20:06
-1

Se você tiver prazer em executá-lo a partir de um script /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_*' ! '(' "$@" ')'

Como alternativa, para criar o mesmo tipo de ! -user "username" lista que você usa:

#!/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_*' "$@"
    
por 26.06.2018 / 20:29

Tags