搜索名称中包含大于特定阈值的数字的目录

搜索名称中包含大于特定阈值的数字的目录

这是我想要修改的命令,并附加一个条件:

find /home/user/backups/ -mindepth 2 -maxdepth 3 -name "*~EEEE000.tif" -print

这是以下的输出ls /home/user/backups/

backup20170101_somerandomstring
backup20170115_somerandomstring
backup20170230_somerandomstring
backup20170305_somerandomstring
backup20170408_somerandomstring
backup20170521_somerandomstring
.
.
.
backup20190111_somerandomstring
backup20190130_somerandomstring
backup20190209_somerandomstring
backup20190301_somerandomstring
backup20190303_somerandomstring
backup20190311_somerandomstring
backup20190313_somerandomstring
backup20190412_somerandomstring
.
.
.
backup20200102_somerandomstring
backup20200103_somerandomstring
backup20200105_somerandomstring
backup20200110_somerandomstring
.
.
.

我只想搜索 2019-03-10 之后生成的目录。因此,这可以很容易地理解为目录 他们名字中的数字大于20190310单词后面的数字backup

我可以想到seq但不知道如何将它与 find 一起使用。我确信还有更好的选择。

seq -f "backup%1.0f" 20190310 20200131

答案1

使用zshshell,文件名通配模式<n-m>匹配 到 范围内的数字nm包含在内)。

图案

/home/user/backups/backup<20190311->_*

将匹配/home/user/backups以字符串开头的所有名称backup,后紧跟一个等于20190311或更大的数字,然后是下划线和可能更多的字符。

仅匹配目录:

/home/user/backups/backup<20190311->_*(/)

将其与原始find命令一起使用:

find /home/user/backups/backup<20190311->_*(/) \
    -mindepth 1 -maxdepth 2 -name "*~EEEE000.tif" -print

这将搜索 glob 匹配的每个目录,以查找以~EEEE000.tif(在特定目录深度)结尾的文件或目录的名称。它会打印找到的路径名。搜索深度已进行调整,以考虑搜索路径根的额外深度。

没有find,并且仅打印常规文件的名称:

print -rC1 -- \
    /home/user/backups/backup<20190311->_*/*'~EEEE000.tif'(.ND) \
    /home/user/backups/backup<20190311->_*/*/*'~EEEE000.tif'(.ND)

这也将解析路径中目录的符号链接。

相关内容