UNIXベースの拡張で別のファイルを見つける方法。 vamsi.log-vamsi100.log、krishna.txt-krishna100.txt、super.csv...、rajat.jpeg...、kiran.xml-kiran100.xmlなど、それぞれ100個のファイルがあるとします。私の要件は、コマンドを実行するとフォルダにパターンがどれだけあるのかを知らせることです。また、拡張ごとに 1 つずつ提供する必要があります。この目標をどのように達成できますか?
ls -ltr
すべてのファイルが提供されます。しかし、フォルダにいくつかの種類のファイルがあるかどうかを知る必要がありますか?
答え1
強打命令:for i in *; do echo "${i##*.}"; done | uniq -c
答え2
一方通行:
find . -maxdepth 1 -type f | sort -u -t. -k3 | wc -l
説明する:
find . -maxdepth 1 -type f
:現在のディレクトリのすべての一般ファイルを探します。sort -u -t. -k3
: フィールド区切り文字を使用してフィールドの出力をソートし、同じ行の3
最初の行のみを印刷します。.
wc -l
:行数を計算します。
編集する
zsh
シェルを使用している場合は、以下を実行できます
echo ${(u)$(echo *(:e))} | wc -w
結果はおそらくケースより良いでしょう。その時点から名前が始まるファイルにも興味がfind
ある場合は、少なくともマルチポイントファイルが正しく考慮されます。.
echo ${(u)$(echo {.,}*(:e))} | wc -w
答え3
私は簡単なアプローチがls *.extension
トリックを実行すると思います:)
それらを計算するには、次のものを使用できます。ls *.extension -1 | wc -l
答え4
find . -maxdepth 1 -type f | awk -F. '{print $NF}' | sort | uniq -c
awk
最後のアイテム.
(「拡張」)以降のアイテムをキャッチするために使用されます。
sort
各「拡張子」のすべての項目をグループ化します。
uniq -c
行/拡張子あたりの重複数を表示します。