find:根据文件在目录中的深度排除具有相同名称的文件

find: Exclude files with the same name based on their depth in a directory

我有这样的免费文件:

root_dir
|
-- dir1
     |
     -- file.ext
     -- misc.txt
     subdir
        |
        -- file.ext
        -- rest.ext
|
-- dir2
     |
     -- file.ext
     -- misc.txt
     subdir
        |
        -- file.ext
        -- rest.ext

我想压缩它的以下子集:

root_dir
|
-- dir1
     |
     -- misc.txt
     subdir
        |
        -- file.ext
        -- rest.ext
|
-- dir2
     |
     -- misc.txt
     subdir
        |
        -- file.ext
        -- rest.ext

我的计划是首先获取文件列表,然后将它们通过管道传输到 gzip 或 tar。 dir1dir2 中的文件具有相同的名称(但内容不同)。然而,有问题的部分是 dir*subdir 中的 file.ext 具有相同的名称,这使得根据名称过滤文件有点棘手。

之后,我在 root_dir

中尝试了以下
find -type -f -not -name *misc.txt*

但是,不出所料,它也在深度 1 处找到了 file.ext。有没有办法从 find 输出中排除这些 depth-1 file.exts?

注释

find . -type f -not -regex '\./[^/]+/file\.ext'

它将丢弃与正则表达式匹配的所有内容。这里是包含文件 file.ext.

的直接子目录

正则表达式是 运行 整个路径。

  • \. 表示以 .
  • 开头
  • [^/]+ 表示一堆不包含 /
  • 的字符
  • file\.ext表示file.ext