サブディレクトリの大文字と小文字を無視し、名前で重複ファイルを検索する

サブディレクトリの大文字と小文字を無視し、名前で重複ファイルを検索する

Linuxシステムで重複したファイル名を一覧表示する方法

  • 大文字と小文字を無視
  • すべてのサブディレクトリを含める

ファイルの違いに基づいて比較しないでください。コンテンツしかし、彼らのものを通して名前。出力は、そのファイルに対して追加のコマンドを実行できるように、パスを含むファイル名のリストでなければなりません。

私たちが持っているとしましょう。

ls -1R /tmp/
foo
BAR
barfoo
a/BAr
a/b/bar
c/bAr

フィルタ/検索スクリプトの出力は次のようになります。

/tmp/BAR
/tmp/a/BAr
/tmp/a/b/bar
/tmp/c/bAr

ベストアンサー1

find . -printf "%p %f\n" | sort -f -k2 | uniq -Di -f1

find開始しない場合は、目的の開始ディレクトリを指定します。.-type fただ追加したい場合文書名前。 

  • このfindコマンドは、ディレクトリ順序(つまり、あなたの場合はランダムな順序)でファイル(およびディレクトリ)名のリストを生成します。
  • -printf "%p %f\n"フルパス名(相対.)とファイル名を印刷します。 
  • sort -fは略語ですsort --ignore-case。つまり、大文字と小文字を区別せずにファイル名のリストをソートします。
  • -k22番目のフィールドをソートキーとして使用するように指示します。 
  • uniq -Di -f1つまり、2番目のフィールドと異なるフィールド(たとえば、同じファイル名(大文字と小文字を区別しない))を大文字と小文字を区別せずに比較して、繰り返されるuniq --all-repeated --ignore-case --skip-fields=1(すべての)出力行を表示します。find

これにより、目的の出力が得られますが、各行の末尾にファイル名が繰り返されます。削除するには、と入力しますsed 's/ .*//'

いくつかの問題:

  • お持ちの場合目次名前は大文字と小文字を除いて同じで、大文字と小文字を除いて同じ名前のファイルが含まれています。たとえば、次のようになります。

    documents/design.doc
    Documents/Design.doc
    

    これにより、これらの項目が一覧表示されます。

  • ファイル(またはディレクトリ)名にスペース、タブ、または改行が含まれていると問題が発生します。

おすすめ記事