亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

測試一個glob是否在bash中有任何匹配

測試一個glob是否在bash中有任何匹配

忽然笑 2019-08-26 14:40:42
測試一個glob是否在bash中有任何匹配如果我想檢查是否存在單個文件,我可以使用test -e filename或測試它[ -e filename ]。假設我有一個glob,我想知道是否存在名稱與glob匹配的文件。glob可以匹配0個文件(在這種情況下我不需要做任何事情),或者它可以匹配1個或多個文件(在這種情況下我需要做一些事情)。如何測試glob是否有匹配?(我不關心有多少匹配,如果我能用一個if語句而沒有循環(僅僅因為我發現最可讀)這樣做是最好的。(test -e glob*如果glob匹配多個文件,則失敗。)
查看完整描述

3 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

Bash特定解決方案:

compgen -G "<glob-pattern>"

逃離模式或它將被預先擴展為匹配。

退出狀態是:

  • 1表示不匹配,

  • 0表示“一場或多場比賽”

stdout與glob匹配的文件列表。
我認為這是簡潔性和最小化潛在副作用的最佳選擇。

更新:請求的示例用法。

if compgen -G "/tmp/someFiles*" > /dev/null; then
    echo "Some files exist."fi


查看完整回答
反對 回復 2019-08-26
?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

nullglob shell選項確實是一種基礎。

為了避免需要對nullglob狀態進行繁瑣的保存和恢復,我只在擴展glob的子shell中設置它:

if test -n "$(shopt -s nullglob; echo glob*)"then
    echo foundelse
    echo not foundfi

為了更好的可移植性和更靈活的通配,請使用find:

if test -n "$(find . -maxdepth 1 -name 'glob*' -print -quit)"then
    echo foundelse
    echo not foundfi

顯式-print -quit操作用于查找而不是默認的隱式-print操作,以便find在找到與搜索條件匹配的第一個文件后立即退出。在大量文件匹配的情況下,這應該比echo glob*或者運行得快得多,ls glob*并且它還避免了擴展命令行過度填充的可能性(一些shell具有4K長度限制)。

如果發現感覺像是矯枉過正,并且可能匹配的文件數量很少,請使用stat:

if stat -t glob* >/dev/null 2>&1then
    echo foundelse
    echo not foundfi


查看完整回答
反對 回復 2019-08-26
  • 3 回答
  • 0 關注
  • 657 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號