Bash

計算包含某個字元串的文件和文件夾的數量

  • January 19, 2019

假設我在 Desktop 目錄中,想計算名稱為exam. 它還應該計算包含字元串的文件exam。所以總結一下,我需要:

  1. 計算名稱的目錄exam
  2. 用名稱和內容計算文件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。最後的sortuniq -c將排序併計算找到的符合條件的文件和目錄的數量。

請注意,對名稱的測試可能會匹配包含exam作為子字元串的名稱,example例如。文件上的grep使用-w這將更有可能匹配單詞,而不是子字元串。

引用自:https://unix.stackexchange.com/questions/491297