web-dev-qa-db-ja.com

重複するディレクトリを見つけて一覧表示する

いくつかのサブディレクトリがあるディレクトリがあり、重複を見つけたいと思っています。フォルダ構造は次のようになります。

└── Top_Dir
    └── Level_1_Dir
        ├── standard_cat
        │   ├── files.txt
        ├── standard_dog
        │   └── files.txt
        └── standard_snake
            └── files.txt
    └── Level_2_Dir
        ├── standard_moon
        │   ├── files.txt
        ├── standard_Sun
        │   └── files.txt
        └── standard_cat
            └── files.txt
    └── Level_3_Dir
        ├── standard_man
        │   ├── files.txt
        ├── standard_woman
        │   └── files.txt
        └── standard_moon
            └── files.txt

上記の例では、次の出力を確認したいと思います。

/top_dir/Level_1_Dir/standard_cat
/top_dir/Level_2_Dir/standard_cat
/top_dir/Level_2_Dir/standard_moon
/top_dir/Level_3_Dir/standard_moon

私はこれをbashで行う方法を探していましたが、何も得られませんでした。誰かがこれを行う方法を知っていますか?

4
dino

これは、Ubuntuでbashを使用して機能しました。ツリーの深さに関係なく、重複するディレクトリにのみ一致します。 $()内の部分は、ls -lの最後の列の重複をカウントすることにより、パイプで区切られたディレクトリ名のリストを作成します。このパイプで区切られたリストは、すべてのディレクトリのリストに対してgrepを使用してフィルタリングされます。また、他のファイルを考慮していません(Wordの一致全体を使用しなかったなど)

> ls -lR Top_Dir/ | grep -E $(ls -lR Top_Dir/ | grep ^d | rev | cut -d" " -f1 | rev | sort | uniq -d | head -c -1 | tr '\n' '|') | grep -v ^d | sed 's/://'

Top_Dir/Level_1_Dir/standard_cat

Top_Dir/Level_2_Dir/standard_cat

Top_Dir/Level_2_Dir/standard_moon

Top_Dir/Level_3_Dir/standard_moon

1
Jedi