星期一, 9月 10, 2007

Unix 指令 find notes

語法:

    find [搜尋路徑] -name "[檔名]" [選項參數]


常用選項:

    ----------------------------    ----------------------------
    -name [filename]                找出符合 [filename] 的檔案
    -exec [command] {}\;            執行 [command]
    -type [d] or [f]                找目錄或是檔案
    -print                          每個檔案以 \n 為間隔, 預設
    -print0                         連續輸出檔案 (符合 xargs -0)


範例:

1. 在 /usr 找 mysql_install_db* :

    find /usr -name "mysql_install_db*" -print

2. 設定目前所有的子目錄權限 0777 而所有檔案的權限 0664:

    find ./ -type d -exec chmod 777 {}\;
    find ./ -type f -exec chmod 664 {}\;

3. 在 /home 裡找出所有 *.cmd 並刪除

    find /home -name "*.cmd" -exec rm {}\;
    find /home -name "*.cmd" | xargs rm

4. 下面這兩種方法都可以找出目錄下 .c 檔中有 'modprobe' 的行:

    find . -name "*.c" | xargs grep modprobe
    grep -r --include="*.c" modprobe .


Tips:

    * -exec 必須由一個 ; 結束,而通常 shell 都會對 ; 進行處理,所以用 \; 防止這種情況。
    * {} 可能需要寫做 '{}',也是為了避免被 shell 過濾。
    * find 的 -exec 指令,在檔案過多時會出現參數太多的 error,最好用 xargs。
    * -name 選項支援 shell 的 wildcard 如 * ? 等,相對來說, shell 保留字如 [ 與 ] 等也需要用 \ 來跳脫。

沒有留言: