3 回答

TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
Bash特定解決方案:
compgen -G "<glob-pattern>"
逃離模式或它將被預(yù)先擴(kuò)展為匹配。
退出狀態(tài)是:
1表示不匹配,
0表示“一場(chǎng)或多場(chǎng)比賽”
stdout
是與glob匹配的文件列表。
我認(rèn)為這是簡(jiǎn)潔性和最小化潛在副作用的最佳選擇。
更新:請(qǐng)求的示例用法。
if compgen -G "/tmp/someFiles*" > /dev/null; then echo "Some files exist."fi

TA貢獻(xiàn)1982條經(jīng)驗(yàn) 獲得超2個(gè)贊
nullglob shell選項(xiàng)確實(shí)是一種基礎(chǔ)。
為了避免需要對(duì)nullglob狀態(tài)進(jìn)行繁瑣的保存和恢復(fù),我只在擴(kuò)展glob的子shell中設(shè)置它:
if test -n "$(shopt -s nullglob; echo glob*)"then echo foundelse echo not foundfi
為了更好的可移植性和更靈活的通配,請(qǐng)使用find:
if test -n "$(find . -maxdepth 1 -name 'glob*' -print -quit)"then echo foundelse echo not foundfi
顯式-print -quit操作用于查找而不是默認(rèn)的隱式-print操作,以便find在找到與搜索條件匹配的第一個(gè)文件后立即退出。在大量文件匹配的情況下,這應(yīng)該比echo glob*
或者運(yùn)行得快得多,ls glob*
并且它還避免了擴(kuò)展命令行過(guò)度填充的可能性(一些shell具有4K長(zhǎng)度限制)。
如果發(fā)現(xiàn)感覺(jué)像是矯枉過(guò)正,并且可能匹配的文件數(shù)量很少,請(qǐng)使用stat:
if stat -t glob* >/dev/null 2>&1then echo foundelse echo not foundfi
添加回答
舉報(bào)