Listar arquivos, diretórios e executáveis no diretório atual

1

Eu tenho shell php e tenho função que faz exatamente isso (mas me dá erro quando eu chamo a função scandir($path) por causa da restrição em php), então eu preciso usar meu shell bash para fazer o mesmo.

Pode ser um comando que lista todas as 3 coisas separadas por alguns delimitadores ou podem ser 3 comandos.

Qual é a melhor maneira de fazer isso? A única coisa em que consigo pensar é find executado 3 vezes com -maxdepth 1 e algumas opções.

    
por jcubic 31.03.2014 / 13:22

1 resposta

3

Com o GNU find , você pode ligar:

find /some/dir -mindepth 1 -maxdepth 1 -type f \
  \( -executable -printf 'X%p
find /some/dir -mindepth 1 -maxdepth 1 -type f \
  \( -executable -printf 'X%p%pre%' -o -printf 'F%p%pre%' \) -o \
  -type d -printf 'D%p%pre%'
' -o -printf 'F%p%pre%' \) -o \ -type d -printf 'D%p%pre%'

A saída será uma lista de registros delimitada por NUL (NUL é o único caractere que pode não aparecer em um caminho de arquivo), cuja primeira letra identifica o tipo ( X , F , D para arquivos regulares executáveis, outros arquivos regulares, diretórios).

Para links simbólicos, se você quiser considerar o tipo do destino do symlink, use -xtype em vez de -type acima. -executable retorna arquivos que são executáveis pelo processo que executa o comando find. Outros tipos de arquivos (fifo, soquete, portas, dispositivos ...) são ignorados. As entradas do diretório . e .. também são ignoradas.

    
por 31.03.2014 / 14:25