Bash
計算包含某個字元串的文件和文件夾的數量
假設我在 Desktop 目錄中,想計算名稱為
exam
. 它還應該計算包含字元串的文件exam
。所以總結一下,我需要:
- 計算名稱的目錄
exam
- 用名稱和內容計算文件
exam
這是我到目前為止所嘗試的。
ls -l | grep -r "exam" | wc -l
但是這個命令只計算包含內容的文件
exam
。如果我有幾個目錄:exam1
,exam2
,exam3
, 和幾個 .txt 文件exam1.txt
,exam2.txt
,exam3.txt
, 並且想要計算它們怎麼辦?
使用
find
, 區別對待目錄和非目錄,分別獲取目錄和非目錄的計數:find . -name '*exam*' \ \( \( -type d -exec echo directory \; \) -o \ \( ! -type d -exec grep -q -wF exam {} \; -exec echo file \; \) \) | sort | uniq -c
這將在名稱包含字元串的目前目錄中或之下找到東西
exam
。如果事物是目錄,則directory
輸出字元串。否則,如果事物是非目錄,並且其內容包含單詞exam
,則輸出字元串file
。最後的sort
和uniq -c
將排序併計算找到的符合條件的文件和目錄的數量。請注意,對名稱的測試可能會匹配包含
exam
作為子字元串的名稱,example
例如。文件上的grep
使用-w
這將更有可能匹配單詞,而不是子字元串。