如何找到包含一个或多个文件的所有目录?

Sae*_*ati 1 find

我有一个目录层次结构。有些目录不包含文件,只包含其他目录。有些包含文件。

例如:

- 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)

我读了这个这个这个,但我无法弄清楚find命令。

更新:目录中可以包含文件和目录。我更新了问题。例如,在2024我有一个电影和另一个目录中。结果应包含/movies/2024/movies/2024/thriller目录。

roa*_*ima 6

查找常规类型的文件并打印包含的目录。列表唯一以确保每个目录仅列出一次。如果在 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)