Shell-Script
按副檔名計算目錄中的文件
為了測試的目的,我想計算一個目錄中有多少圖像文件,按文件副檔名(jpg =“yes”分隔每個圖像文件類型。這是因為稍後它將對另一個執行操作的腳本有用在每個文件副檔名上)。我可以僅對 JPEG 文件使用以下內容嗎?
jpg="" count=`ls -1 *.jpg 2>/dev/null | wc -l` if [ $count != 0 ] then echo jpg files found: $count ; jpg="yes" fi
考慮到文件副檔名 jpg、png、bmp、raw 等,我應該使用
while
循環來執行此操作嗎?
我的方法是:
- 列出目錄中的所有文件
- 提取他們的副檔名
- 對結果進行排序
- 計算每個擴展的出現次數
有點像這樣(最後一次
awk
呼叫純粹是為了格式化):ls -q -U | awk -F . '{print $NF}' | sort | uniq -c | awk '{print $2,$1}'
(假設 GNU
ls
在這裡-U
選擇跳過排序作為優化。如果不支持,可以安全地刪除它而不影響功能)。
這遞歸地遍歷文件併計算匹配的副檔名:
$ find . -type f | sed -e 's/.*\.//' | sort | uniq -c | sort -n | grep -Ei '(tiff|bmp|jpeg|jpg|png|gif)$' 6 tiff 7 bmp 26 jpeg 38 gif 51 jpg 54 png