Find
搜尋名稱中包含大於某個門檻值的數字的目錄
這是我擁有並希望使用附加條件進行修改的命令:
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
使用
zsh
外殼程序,文件名通配模式<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)
不過,這也將解析到路徑中目錄的符號連結。