特定のディレクトリに存在するファイルの種類を通知するコマンドはありますか?
のようなコマンドを使用して、ファイルの種類を調べることができますod -c myfile | less。
しかし、ディレクトリ内のすべてのファイルに対してそれを行う方法はわかりません。
特定のディレクトリに存在するファイルの種類を通知するコマンドはありますか?
のようなコマンドを使用して、ファイルの種類を調べることができますod -c myfile | less。
しかし、ディレクトリ内のすべてのファイルに対してそれを行う方法はわかりません。
回答:
が、od -c実際にファイルの内容を表示します、それは、そのファイルの種類を得るための良い方法ではありません。一部のファイルにはファイルタイプのヘッダーが含まれますが、すべてが含まれるわけではありません。より良い方法はコマンドfileです:
$ echo "hello" > foo.txt
$ file foo.txt
foo.txt: ASCII text
したがって、ディレクトリ内のすべてのファイルタイプのリストを取得するには、次のようにします。
for file in dir/*; do file "$file" | cut -d: -f 2; done | sort -u
PNG image data, 1500 x 500, 8-bit/color RGBA, non-interlaced
ASCII text
directory
GIF image data, version 89a, 22 x 22
ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=becf821e4d814fdb69306d0b3f686eb06992f5e5, stripped
for file in dir/*; do ... done;:のすべてを反復処理しますdir(dir単なる例です。これを検索する実際のディレクトリの名前に変更する必要があります)。各項目を順番に保存します。$filefile "$file":file見つかった各アイテムで実行します。cut -d: -f 2:2番目のフィールド(で定義されたフィールド:)のみを出力しますsed 's/^ //; s/ +/ /g' :行の先頭からスペースを削除し、連続するスペースを単一のスペースに変換します。sort -u :重複するファイルタイプを削除するdir/、これは単なる例の名前でしたfor file in /home/alex/*; do ... done。たとえば、それを実際のディレクトリの名前に変更する必要があります。
sort -uそれらを削除し、行は(彼らはまた、彼らは非同一になり、スペースの異なる数を、持っているかもしれない)異なっている必要があります。
私はおそらくこのようなことをするでしょう-
find . -type f -exec file {} \;
これは、現在のパスからファイル(ディレクトリなしなど)を検索し、file各ファイルでコマンドを実行します。
これを試して:
ls | xargs file -b | sort | uniq
使い方:
ls:ディレクトリの内容を一覧表示
file -b:ファイルの種類を決定します。出力行にファイル名を追加しません
sort:行をソートします
uniq:繰り返される行を省略します
file -b *代わりにを使用ls | xargs file -bして、解析を回避できますls。