リストに重複したファイル名をリストしたいですか?

リストに重複したファイル名をリストしたいですか?
bash-3.00$ cat f.txt
-rw-r--r--   1 mukesh   other        102 Nov  5 18:32 f1.txt
-rw-r--r--   1 mukesh   other         19 Nov  5 18:32 f2.txt
-rw-r--r--   1 mukesh   other        204 Nov  5 18:32 f3.txt //DUPLICATE
-rw-r--r--   1 mukesh   other        204 Nov  6 18:32 f3.txt  //DUPLICATE
-rw-r--r--   1 mukesh   other        204 Nov  6 18:32 f100.txt

f.txt というファイルに上記のファイル名がリストされているとします。重複したファイル名をすべてリストしたいです(ファイル名のみ)、重複したファイル名と重複した数を表示します。

例:上記のリストにはf3.txtの重複があり、合計2つのf3.txtファイル名が見つかりました。

ベストアンサー1

述べたように、awk解決策は次のとおりです。

awk '{d[$9]++}END{for(f in d)if(d[f]>1)print d[f],f}' f.txt

名前にスペース文字を含むファイルもある場合は、いくつかの回避策が必要です。

awk '{f=$9;for(i=10;i<=NF;i++)f=f" "$i;d[f]++}END{for(f in d)if(d[f]>1)print d[f],f}' f.txt

たとえば、シンボリックリンクを処理すると、上記の回避策が失敗する可能性があります。結局のところ、ls出力を解析するのは良い考えではありません。可能であれば、別の方法でf.txtを生成することをお勧めします。 (たとえば、findリストstat形式をより細かく制御できます。)

おすすめ記事