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。 dir1
和 dir2
中的文件具有相同的名称(但内容不同)。然而,有问题的部分是 dir*
和 subdir
中的 file.ext
具有相同的名称,这使得根据名称过滤文件有点棘手。
在 之后,我在 root_dir
中尝试了以下
find -type -f -not -name *misc.txt*
但是,不出所料,它也在深度 1 处找到了 file.ext
。有没有办法从 find
输出中排除这些 depth-1 file.ext
s?
注释
- 扩展名是虚拟的,代表一堆不同类型的文件
- 我有数百个
dir1
和 dir2
- 每个
dir*
都很大,先全部压缩,再去掉第一层,效率不高file.ext
s
find . -type f -not -regex '\./[^/]+/file\.ext'
它将丢弃与正则表达式匹配的所有内容。这里是包含文件 file.ext
.
的直接子目录
正则表达式是 运行 整个路径。
\.
表示以 .
开头
[^/]+
表示一堆不包含 /
的字符
file\.ext
表示file.ext
我有这样的免费文件:
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。 dir1
和 dir2
中的文件具有相同的名称(但内容不同)。然而,有问题的部分是 dir*
和 subdir
中的 file.ext
具有相同的名称,这使得根据名称过滤文件有点棘手。
在 root_dir
find -type -f -not -name *misc.txt*
但是,不出所料,它也在深度 1 处找到了 file.ext
。有没有办法从 find
输出中排除这些 depth-1 file.ext
s?
注释
- 扩展名是虚拟的,代表一堆不同类型的文件
- 我有数百个
dir1
和dir2
- 每个
dir*
都很大,先全部压缩,再去掉第一层,效率不高file.ext
s
find . -type f -not -regex '\./[^/]+/file\.ext'
它将丢弃与正则表达式匹配的所有内容。这里是包含文件 file.ext
.
正则表达式是 运行 整个路径。
\.
表示以.
开头
[^/]+
表示一堆不包含/
的字符
file\.ext
表示file.ext