我在一個特定目錄下有一組只有一個特定擴展名的檔案。我如何檢查我是否至少有這些檔案之一。如果至少存在一個具有該特定擴展名的檔案,則列印至少一個與您的擴展名匹配的檔案存在于您的目錄中。如果沒有,則列印no files of that specific extension exist in your directory。
此外,當不存在特定擴展名的檔案時,我會收到以下錯誤訊息,即使我使用2>/dev/null重定向,我也無法擺脫它:(zsh: no matches found: *.mkv因此,行為與 Bash 不同)
uj5u.com熱心網友回復:
要禁用錯誤,請使用Nglob 限定符啟用該NULL_GLOB選項,用空結果替換錯誤。
% print *.mkv
zsh: no matches found: *.mkv
% print *.mkv(N)
%
對于剩下的問題,您可以將結果捕獲到名為 的陣列中result,然后通過檢查陣列的大小來獲取匹配項的數量$#result。
如果有用的話,您還可以限制模式產生的匹配項。例如,*.mkv[1,5]產生(最多)前 5 個結果。第二個數字是可選的;單個值僅提供該一個元素。
uj5u.com熱心網友回復:
我的問題解決如下:
setopt no_nomatch
if ls *.mkv 1> /dev/null 2>&1; then echo OK; fi
setopt nomatch # Undo the change after evaluation (just in case)
靈感來自:
- https://unix.stackexchange.com/a/310553
- https://unix.stackexchange.com/a/257141
關于這個話題的好讀物:
https://scriptingosx.com/2019/06/moving-to-zsh-part-3-shell-options/
uj5u.com熱心網友回復:
假設您正在檢查的目錄是my_dir:
all_files=(my_dir/*(ND))
if (( #all_files > 0 ))
then
echo at least one entry exists in my_dir
fi
這還將包括. my_dir如果您只對普通檔案感興趣,請改用
all_files=(my_dir/*(ND,))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/534831.html
標籤:测试zsh
