Find

搜尋名稱中包含大於某個門檻值的數字的目錄

  • January 30, 2020

這是我擁有並希望使用附加條件進行修改的命令:

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>匹配範圍內的數字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)

不過,這也將解析到路徑中目錄的符號連結。

引用自:https://unix.stackexchange.com/questions/564894