以下のディレクトリ構造を計算するために、次のスクリプトをどのように作成できますか?
dir1/diskname
dir2/diskname
dir3/diskname
dir4/diskname
diskname には次の値が含まれます。
hitachi
samsung
LG
ディスク名の各ディレクトリを検索して値を計算するスクリプトが必要です。
たとえば、dir1,2,4 のファイルが hitachi で 3 が samsung の場合、結果は次のようになります。
hitachi 3
samsung 1
答え1
パンキが提案したとおりコメントから:
cat dir*/diskname | sort | uniq -c
これにより、.dllを使用してdiskname
すべてのファイルが1つのストリームにリンクされますcat
。このsort
ユーティリティはデータをソートし、uniq -c
各行の連続発生回数を計算します。
一般的に、以下があるとき数千filenameを使用すると、ファイル名のグロービングパターンがあまりにも多くのパス名に展開されるため、「引数リストが大きすぎます」というエラーでdiskname
コマンドcat
が失敗します。dir*/diskname
この場合、すべてのファイルを繰り返すことを選択できます。
for name in dir*/diskname
do
cat "$name"
done | sort | uniq -c
または、次のものを使用できますfind
(現在のディレクトリがdir*
すべてのディレクトリを見つけることができる場所であると仮定)。
find . -maxdepth 2 -path './dir*/diskname' -type f -exec cat {} + | sort | uniq -c