Em sistemas e sistemas não Linux sem GNU find
, é provável que o seguinte forneça a mesma saída que find . -type f ! -writable
, mas não leva em conta grupos secundários.
myname=$( id -un )
mygroup=$( id -gn )
find . -type f '(' \
'(' -user "$myname" ! -perm -u=w ')' -o \
'(' ! -user "$myname" -group "$mygroup" ! -perm -g=w ')' -o \
'(' ! -user "$myname" ! -group "$mygroup" ! -perm -o=w ')' ')'
Os quatro testes em ordem:
- É um arquivo normal?
- É um arquivo que eu possuo, mas não tenho permissões de gravação?
- É um arquivo que eu não possuo, mas que pertence ao meu grupo e que eu não tenho permissões de gravação de grupo para?
- É um arquivo que eu não possuo e que não pertence ao meu grupo, e que eu não tenho permissões de gravação gerais ("outras") para?
O benefício disso é que você pode substituir o nome e grupo de outro usuário, o que eu acho que o find
do GNU -writable
permite que você faça.
O mesmo comando, mas com a lógica escrita em formato AND:
find . -type f \
! '(' -user "$myname" -perm -u=w ')' \
! '(' ! -user "$myname" -group "$mygroup" -perm -g=w ')' \
! '(' ! -user "$myname" ! -group "$mygroup" -perm -o=w ')'