2023年5月4日 星期四

find 找出檔案、grep 找出檔案內容

◆ 過濾結果集:找出符合 grep 條件的目標。三種語法善惡比較
  X find /data/trash/ -type f -iname "*test*" | grep -i -Hn "flatpak" {} \;
   說明:失敗! 找出檔案內容的語法「 | 」之後禁止直接 grep,要插入一個轉送器(xargs)

  △ find /data/trash/ -type f -iname "*test*" | xargs grep -i -Hn "flatpak" {} \;
   說明:成功,但額外出現二列指令無效的提示!xargs 之後接 grep 指令似乎水土不合!!
   ※ 放棄此用法!!轉用「-exec grep 」語法

  V find /data/trash/ -type f -iname "*test*" -exec grep -i -Hn "flatpak" {} \;
   說明:成功!但結果內容多了「檔名」標示 => /data/trash/trash20.txt:1:/etc/X11/Xsession.d/20flatpak


◆ 過濾結果集:找出符合 grep 條件的目標 (若目標是檔案,則與找檔案內容無關)
  語法:<前段語法> | grep -i <關鍵字>
  說明:grep 針對前段語法所找出的結果集,「再一次」的做篩選

  範例1:sudo apt list --installed | grep -i "fire*"
  釋義1:grep 關鍵字的 *星號要放對位置,若打成 "*fire*" 就找不到資料

  範例2:find /data/trash/ -type f -iname "*t*" | grep -i "45"
  釋義2:find 目標路徑中「含有t」的檔案。grep 再次篩選出這些檔案中具有「 45 」關鍵字者


◆ 過濾結果集:找出符合 grep 條件的目標 (若目標是檔案,則是在找檔案內容)
  語法 :<前段語法> -exec grep -i <關鍵字> {} \;

  範例1 :find /data/trash/ -type f -iname "*t1*" -exec grep -i -Hn "flatpak" {} \;
  範例1 說明 :二個範例皆有 Hn參數,結果必然會顯示為三區「檔名路徑區、同檔數字區、內容符合(條件)區」
  結果 => /data/trash/trash20.txt:3:/etc/X11/Xsession.d/20flatpak
  檔名路徑區(H) :/data/trash/trash20.txt
  同檔數字區(n) :3 (同一檔中,符合 grep 條件的,「至少有3列」
  內容符合區(i) :/etc/X11/Xsession.d/20flatpak

  範例2 :find /data/trash/ -type f -iname "*t1*" -exec grep -i -Hn "flatpak" {} \; > /data/temp/result.txt
  範例2 說明 :此範例尾端多了「轉存」的語法,把結果存入指定路徑檔 result.txt 之中


◆ 過濾結果集:「刪除」符合 grep 條件的檔案與資料夾
  語法 :<前段語法> -exec grep -i <關鍵字> {} \;
  範例 :先變更身份為「root」=> sudo su -
     find /data/trash/ -type f -iname "*t1*" -exec grep -i "flatpak" {} \; | xargs rm -fr
  說明 :grep 須有參數i,絕不可加參數 Hn,結果必須只是「要刪除檔案的路徑名」