以前 ls
萬用字元真的很方便
1 | ls *.jpg |
這樣可以列出很多 *.jpg
圖片
但是有些細節沒有釐清
偶爾會遇到不能用的狀況下
今天終於徹底了解
2021-07-25
最近才發現這有專有名稱叫做glob
釐清 *
1 | echo * |
就是現在目錄抓到相關檔案名稱
這也是為什麼? 原理就這麼簡單
但我這邊沒講更細
下面 shopt -s nullglob 會提到
shell array 應用
1 | jpgs=(*.jpg) |
這樣看似可以用
但沒有 jpg ,就會產生 *.jpg
這邊要小心
這邊也是有辦法解決
1 | shopt -s nullglob # bash |
參考:sh - Check if a file exists with wildcard in shell script - Stack Overflow
shopt -s nullglob
1 | shopt -s nullglob # enable |
1 | echo my*file |
參考: linux:以下shell選項的含義是什麼 - shopt -s nullglob \ textglob - Codebug
1 |
|
// List all file with extension .mp3 under folder ‘empty’
./listFE.sh empty mp3
File test.mp3 found
以上參考:程式扎記: [Linux 文章收集] Use BASH nullglob To Verify *.c Files Exists or Not In a Directory
當然也有別的解決方案
test -f *.jpg
我公司有古早程式這樣寫
但會遇到一些問題
除了上述解決方法
還有一種是
1 | files=$(ls /tmp/*.cache 2> /dev/null | wc -l) |
find 方法(多層搜尋方法)
1 | files=$(find /tmp -type f -name "*.cache" | wc -l) |
find 搜尋也可以加 or 條件
再多個搜尋也是很方便1
find /tmp -type f -name "*.mpg" -o -name "*.jpg"
更多方法可以看:Bash tips: if -e wildcard file check => [: too many arguments - MDLog:/sysadmin
相關連結:
- bash - Use asterisk in variables - Unix & Linux Stack Exchange
- sh - Check if a file exists with wildcard in shell script - Stack Overflow
- How to Check / Test if a File or Directory Exists in Bash
- Bash tips: if -e wildcard file check => [: too many arguments - MDLog:/sysadmin
- 電腦各種符號英文唸法 | 阿維雜記本 (Wei’s Blog)
- linux - bash, detecting mp4 files - Stack Overflow
- 关于bash:确认是否存在一个或多个目录 | 码农家园