Windowsにはハードドライブ上のすべてのファイルの数を数えるプログラムがあり、出力にはファイル拡張子のリストと数字(ドライブ上のファイル数(例:jpg)を表示)が表示されます。
gnu + linuxの端末でこれを行うにはどうすればよいですか?
答え1
find /filesystem -xdev -type f -name '?*.*' -print0 | awk -F. -vRS='\0' '
{c[$NF]++}; END{for (i in c) print c[i],i}' | sort -rn | less
/filesytem
表示するファイルシステムのマウントポイントはどこにありますか?
答え2
Unixのアイデアは、ビルディングブロックを提供し、これらのビルディングブロックを組み立てて、このような特別なタスクを実行できるようにすることです。
これfind
このコマンドは、ディレクトリツリーを参照して特定の基準を満たすファイルを一覧表示または操作します。たとえば、find -xdev /
ルートファイルシステム内のすべてのファイルを繰り返し、その名前を表示します。このオプションは、-xdev
ネットワークマウント、システム情報を提供する特別なファイルシステムなど、他のファイルシステムのファイルを無視します。
印刷する内容を選択するには、GNUを探す供給-printf
行動。これ%f
指示するディレクトリ部分なしでファイル名を印刷します。
Linuxファイル名には、スラッシュ(ディレクトリ区切り文字)とnullバイト以外の任意のバイトを含めることができます。ファイル名に改行文字が含まれていないと仮定すると、ファイル名の処理がより簡単になります。安全のため、改行文字を含むファイル名を除外できます。
find / -xdev ! -name $'*\n*' -printf '%f\n'
拡張子を持つファイルを選択するには、最初の文字ではなくドットを含む名前と通常のファイルのみを一致させます(シンボリックリンクも含めることも含めない場合もあります)。
find / -xdev -name '?*.*' ! -name $'*\n*' -type f -printf '%f\n'
十分なfind
。拡張を処理するには、シェルを使用してテキスト処理ツールを使用します。管路それらを組み合わせてください。最初sedファイル名の非拡張部分を削除するために再作成します。
find / -xdev -name '?*.*' ! -name $'*\n*' -type f -printf '%f\n' |
sed 's/.*\.//'
最後に、各拡張の発生回数を計算するためにタイプ出力と重複回数の計算、最後に発生回数に基づいて結果をソートします。
find / -xdev -name '?*.*' ! -name $'*\n*' -type f -printf '%f\n' |
sed 's/.*\.//' | sort | uniq -c | sort -n