Usando ls
e grep
:
ls -lAR | grep "^\-..x..x..x"
-l: mostra as permissões no formato rwx.
-R: Recursivo.
Como diz o título, estou procurando todas as maneiras alternativas que você pode imaginar para listar os arquivos que são executáveis por qualquer pessoa (proprietário, grupo, outros) no diretório e nos subdiretórios atuais.
Para formas alternativas, quero dizer aqueles que não usam o comando find:
find -L . -type f -perm -111
find -L . -type f -perm -a=x
Um método que eu gostaria de ver é uma combinação de ls e grep.
ls
geralmente não pode ser processada de forma confiável.
Se você pode garantir que os nomes dos arquivos não contenham caracteres de nova linha, você pode fazer:
ls -AlLR ./| grep -E '^-(..[[:lower:]]){3}'
Isso é linhas de impressão que começam com -
(somente arquivos regulares) e para as quais o terceiro caractere em cada grupo de 3 caracteres no campo de pemission é uma letra minúscula (na prática, geralmente será x
, s
, l
ou t
. Alguns sistemas podem ter extensões, mas deixariam uma letra minúscula se o arquivo fosse executável).
Observe que ele só imprimirá o nome do arquivo, não o caminho completo.
Com zsh
, você também pode fazer:
printf '%s\n' **/*(D-.f+111)
Ou:
printf '%s\n' **/*(D-.f:a+x:)
De dentro de bash
:
zsh -c 'printf "%s\n" **/*(D-.f+111)'
Suponho que você esteja usando -L
na sua abordagem find
, pois para links simbólicos, você deseja verificar o destino do symlink. Esse é o objetivo do sinalizador -
acima.
Observe, entretanto, que outro efeito colateral de find
' -L
é que ele iria descer em links simbólicos para diretórios. O mesmo acontecerá com ls -LR
, não com a solução zsh
acima. Se você realmente quer descer em links simbólicos para os diretórios, substitua o **
por ***
, se você quiser evitar descender para links simbólicos para diretórios com find
, com GNU find
(como encontrado no Ubuntu), você pode faça:
find -L . \( ! -xtype l -o -prune \) -type f -perm -111
Em qualquer caso, todos eles não levariam em conta os arquivos cujas permissões os tornariam executáveis por todos, mas estão em diretórios que não são pesquisáveis por todos. Ele também pode fornecer resultados incorretos se ACLs ou outras medidas de segurança estiverem em vigor.
Para considerar também a pesquisabilidade dos componentes do caminho, você poderia:
find -L . \( ! -xtype l -perm -111 -o -prune \) -perm -111
(assumindo que todos os componentes do caminho que levam ao atual diretório de trabalho em si também são searchabe do mundo)
Tags permissions find files shell