実行可能ファイル、ASCIIなどのファイル形式を表示できるように端末にファイルを一覧表示するにはどうすればよいですか?

実行可能ファイル、ASCIIなどのファイル形式を表示できるように端末にファイルを一覧表示するにはどうすればよいですか?

私はlsを使ってディレクトリ内のファイルをリストし、他のオプションを渡そうとしました。

ファイル形式を一覧表示する機能もありますか?個々のファイルに対してfileコマンドを実行せずに、実行可能ファイル、共有ライブラリファイル、またはASCIIファイルが何であるかを知りたいです。

答え1

lsこの情報はそれ自体では表示されません。

find次のように出力をパイプできますfile -f -

$ find /usr/local/bin | file -f -
/usr/local/bin:              directory 
/usr/local/bin/apt:                  Python script, ASCII text executable
/usr/local/bin/mint-md5sum:                          ASCII text
/usr/local/bin/search:                     Bourne-Again shell script, ASCII text executable
/usr/local/bin/gnome-help:                         Python script, ASCII text executable
/usr/local/bin/office-vb.sh:                           ASCII text
/usr/local/bin/pastebin:                       Python script, ASCII text executable
/usr/local/bin/highlight:                        POSIX shell script, ASCII text executable
/usr/local/bin/yelp:                   Python script, ASCII text executable

フルパスとファイル名のみを印刷するので、find代わりに使用してください。したがって、現在のディレクトリのファイルに対してのみこれを行う必要がある場合は、次の手順を実行します。lsls

ls | file -f -

動作します。

答え2

lsそうしないでください。その使命は、ファイルコンテンツではなくファイルメタデータ(権限、タイムスタンプなど)を報告することです。ただし、fileこれはそれ自体で行われます(すべてのファイルを一覧表示するためにシェルワイルドカードと組み合わせて)。

file *

現在のディレクトリの場合、または

file /some/directory/*

別のディレクトリに。

メタデータとファイルコンテンツ情報を結合したい場合は、ls合計出力を結合できますfile。 1 つのアプローチは、2 つのコマンドを配置して、1 行に 1 つのファイルを同じ順序でリストし、次を使用することです。pasteこれらを結合するユーティリティ - 次のようになります。

paste <(ls -dlog -- *) <(file -b -- *)

(これは一般的な対話型シェルであるbash、zsh、およびksh93で利用可能なプロセス置換を使用します。)column列をソートする便利な方法であるユーティリティ:

paste <(ls -dlog -- *) <(file -b -- *) | column -ts $'\t'

フィールドを別の順序で出力するには、joinむしろファイル名のフィールドです。スペースを含むファイル名を処理し、垂直に並べ替えられた結果を生成するためにスペースとタブの間を行き来しました。

join -t $'\t' -1 2 -2 1 <(ls -dlog -- * |
                          sed 's/^\([^ ][^ ]*  *[^ ][^ ]*  *[^ ][^ ]*  *[^ ][^ ]*  *[^ ][^ ]*  *[^ ][^ ]*\)  */\1\t/') \
                        <(file -- * | sed 's/: */\t/') |
column -ts $'\t'

関連情報