查找并列出重复目录

din*_*ino 5 scripting duplicate directory macos

我有一个包含许多子目录的目录,并希望找到任何重复项。文件夹结构如下所示:

??? 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
Run Code Online (Sandbox Code Playgroud)

通过上面的示例,我希望看到以下输出:

/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
Run Code Online (Sandbox Code Playgroud)

我一直在搜索如何通过 bash 完成这项工作,但一无所获。有人知道这样做的方法吗?

小智 -1

这可以在 Ubuntu 上使用 bash 进行。它只匹配重复的目录,无论树中的深度如何。$() 中的部分通过计算 的最后一列中的重复项来构建以管道分隔的目录名称列表ls -l。这个以竖线分隔的列表是使用 grep 对所有目录的列表进行过滤的。另外,不考虑其他文件(不使用全字匹配等)

> 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/://'
Run Code Online (Sandbox Code Playgroud)

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