这是我想要修改的命令,并附加一个条件:
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
使用zsh
shell,文件名通配模式<n-m>
匹配 到 范围内的数字n
(m
包含在内)。
图案
/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)
这也将解析路径中目录的符号链接。