私はPHPシェルを持っていて、これを行う関数があります(しかしscandir($path)
関数を呼び出すとPHPの制限のためにエラーが発生します)。したがって、同じことをするにはbashシェルを使用する必要があります。
区切り文字で区切られた3つの項目のすべてをリストする1つのコマンドでも、3つのコマンドでもかまいません。
最良のアプローチは何ですか?私が考えることができる唯一のことは、find
いくつかのオプションを使用して3回行うことです。-maxdepth 1
答え1
GNUを使用すると、find
以下を呼び出すことができます。
find /some/dir -mindepth 1 -maxdepth 1 -type f \
\( -executable -printf 'X%p\0' -o -printf 'F%p\0' \) -o \
-type d -printf 'D%p\0'
出力は、最初の文字が識別されるNULで区切られた(NULはファイルパスには現れない唯一の文字)レコードのリストです。タイプ(X
、F
、D
実行可能な一般ファイル、その他の一般ファイル、およびディレクトリに使用されます)
シンボリックリンクの場合、シンボリックリンクのターゲットタイプを考慮するには、上記の-xtype
代わりに使用します。この検索コマンドを実行するプロセスで実行可能ファイルを返します。他の種類のファイル(fifo、ソケット、ゲート、デバイス...)は無視されます。ディレクトリエントリも無視されます。-type
-executable
.
..