我有一个目录层次结构。有些目录不包含文件,只包含其他目录。有些包含文件。
例如:
- movies
- 2022
- action
- movie.mp4
- another-movie.mp4
- 2023
- drama
- movie2.mp4
- 2024
- thriller
- movie3.mp4
- movie4.mp4
Run Code Online (Sandbox Code Playgroud)
我想要一个find
可以提供此结果的命令:
/movies/2022/action
/movies/2023/drama
/movies/2024
/movies/2024/thriller
Run Code Online (Sandbox Code Playgroud)
更新:目录中可以包含文件和目录。我更新了问题。例如,在2024
我有一个电影和另一个目录中。结果应包含/movies/2024
和/movies/2024/thriller
目录。
查找常规类型的文件并打印包含的目录。列表唯一以确保每个目录仅列出一次。如果在 GNU 系统上,即使存在包含换行符的文件路径,也可以可靠地完成此操作:
find /path -type f -print0 |
LC_ALL=C sed -z 's!/[^/]*$!!' |
LC_ALL=C sort -zu |
tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)
标准地假设文件路径不包含换行符:
find /path -type f -print |
LC_ALL=C sed 's!/[^/]*$!!' |
LC_ALL=C sort -u
Run Code Online (Sandbox Code Playgroud)