いくつかのサブディレクトリがあるディレクトリがあり、重複を見つけたいと思っています。フォルダ構造は次のようになります。
└── 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で行う方法を探していましたが、何も得られませんでした。誰かがこれを行う方法を知っていますか?
これは、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