淺談Linux 的find 指令之exec應用

less than 1 minute read

find 是很常用的Linux  指令,但是我們在查詢之餘並不會僅是看看而已,有時候會包含一些操作及簡單的排序功能。這時候就需要用到exec這個指令。

起因

前陣子在重構專案內過大的檔案,在處理完一部分後,還需要查詢有哪些太大的檔案可以拿來重構,發現對Linux 的指令真是一整個不熟(大概僅限於ls/cd系列),所以順便藉此記錄一下筆記。

先列出最後結果的指令

find .  -type f -exec du -h {} + | sort -rh | head -n 5

Find指令

用於查找檔案。可參考

常用參數如下:

  • .:代表當前目錄檔案。可一需求替換~, /home䓁。

  • -type:指令檔案的類型,常見的有:

    • d:目錄
    • f:一般檔案
    • p:具名的pipe
  • -exec:將搜尋出來的結果處理在使用其他指令處理。花括弧({})代表前面find查找出來的文件名。中止則用+或是\;

du指令

用於顯示目錄或文件的大小,可參考

常用參數如下:

  • -h:代表--human-readable, 顯示人類可讀的形式,以K, M, G為單位。(Print sizes in human readable format, rounding values and using abbreviations. For example, “1K”, “234M”, “2G”, etc.)
  • -a/-all:顯示目錄中個別文件大小。(Write counts for all files, not just directories.)
  • -c/--total :顯示目錄中個別文件大小,同時也顯示總和。(Display a grand total.)
  • --exclude=<目錄或文件>:略過指令的目錄及文件。(Exclude files that match PATTERN.)
  • --max-depth=<目錄層數>:超過指令層數的目錄後忽略。(Print the total for a directory (or file, with –all) only if it is N or fewer levels below the command line argument; –max-depth=0 is the same as –summarize.)

sort指令

用來排序。可參考

常用參數如下:

  • -r:透過反向方式排序。(Reverse the result of comparisons.)
  • -h:透過人類可讀的單位的數值做排序。(Compare human readable numbers)
  • -n:透過數字排序。(Compare according to string numerical value.)
  • -R:隨機排序(Sort by random hash of keys)

head指令

輸出頭幾個檔案。可參考

常用參數如下:

  • -n/--lines=[-]num:用來取前幾個檔案。預設是10筆

Tail指令

輸出倒數幾個檔案。可參考

常用參數如下:

  • -n/--lines=[-]num:用來取前幾個檔案。預設是10筆

所以就最上面的例子來說

find .  -type f -exec du -h {} + | sort -rh | head -n 5

這段指令的意思為:

搜尋(find)當前目錄底下(.)的一般檔案(-type f),取出後再依大小排列(-exec du -h {}),排列的結果再由檔案大小做反向排序(sort -rh),並取前5個項目列出(head -n 5)。

Categories:

Updated: