Sem find
, você ainda tem um shell (que pode expandir os curingas) e pode fazer um loop sobre o conteúdo do diretório verificando primeiro se cada um é um arquivo, se não for gravável e se não for executável e, em seguida, se for legível.
É provável que alguém escreva um script para demonstrar, mas é útil começar lendo a documentação, por exemplo, Teste POSIX .
A propósito, o uso de " somente " no título da questão excluiria os resultados em que o arquivo é gravável ou executável. Em POSIX find
, você pode expressá-lo assim:
find . -type f \! \( -perm -u=w -o -perm -u=x -o -perm -g=w -o -perm -g=x -o -perm -o=w -o -perm -o=x \)
O GNU find
fornece extensões que permitem expressões mais compactas :
find . -type f \! -perm /u=wx,g=wx,o=wx
A utilidade test
(mais usada como [
e ]
) fornece testes mais simples que find
, por exemplo,
for name in *; do [ -f "$name" -a -r "$name" -a ! -w "$name" -a ! -x "$name" ] && ls -l "$name"; done
No entanto, suas permissões são apenas para o usuário , não para o grupo ou outro . Para excluir arquivos com base neles, você pode usar ls
, por exemplo,
for name in *; do [ -f "$name" ] && case "$(ls -l "$name")" in -r--r--r--*) echo "$name";; esac; done
ou (se você quiser permitir arquivos executáveis)
for name in *; do [ -f "$name" ] && case "$(ls -l "$name")" in -r-?r-?r-*) echo "$name";; esac; done