find 路徑 -type f -name "*.mp3" -mtime +2 -exec rm -f {} \;
-type f -> 是指 type 為 file ,
-name 有確定要指定檔名才使用 ,可用 Regular Expression ,字串中間有空白要用' ' 或是 " " 去括起來
-mtime 是指 n*24小時 ,3天前的就是 +2
-exec 後面接你要執行的指令 ,這邊我做的是 rm 刪除指令
{} 代表的就是 find 出來的那些檔案
\; 代表的是指令的結束 ,它要用 \ 去跳脫保留字
尋找檔案中包含的文字
方法一
find -name "*.*" |xargs grep "???" // 尋找檔案中含有 ??? 的檔案
方法二
find . -name "*" -exec grep ??? {} \; -print |more //
方法三
find . | xargs grep -snH "search text" --color | cut -f1 -d ' '
可以只秀出檔案名稱. 簡潔多了.
方法一 快多了...
方法一 進階版
find -name "*.*" |xargs grep "???" |awk '{printf "%50s %20s%s%s\n",$1,$2,$3,$4}'
列出來的資訊 整齊多了.
以下來源
【 基本語法 】
查詢檔案名稱 ( 也可以查詢「目錄名稱」,其中 * 是萬用字元 )
find $HOME -name '*.mp3'
查詢檔案名稱 (不區分大小寫)
find /etc -iname 'Network'
find /var/log -iname '*.log' -type f
find /etc -iname 'apache2' -type d
b block (buffered) special找尋所有檔案大小大於 50MB 的檔案
c character (unbuffered) special
d directory ( 一般目錄 )
p named pipe (FIFO)
f regular file ( 一般檔案 )
l symbolic link
s socket
D door (Solaris)
find /var -type f -size +50M
找尋所有檔案大小小於 50MB 的檔案
find /var -type f -size -50M
find $HOME -type f -atime +7
find $HOME -type f -atime -7
find $HOME -type f -amin +10
find $HOME -type f -amin -10
find $HOME -type f -ctime +30
find $HOME -type f -user tom
【 進階應用 】
刪除 30 天以上未經存取過的暫存檔案 ( 注意: 以下指令最後一個分號(;)前一定要加上反斜線 )
find /tmp -type f -atime +30 -print -exec rm -f '{}' \;
刪除 30 天以上未經存取過的暫存檔案 ( 使用 xargs 當成單一命令的參數 )
find /tmp -type f -print0 | xargs -0 rm -v
註3: 使用 rm 命令加上 –v 是為了能顯示出被刪除的檔案名稱,這個參數可以省略 註4: 使用 xargs 會將所有 find 命令查到的檔案轉換成 rm 的參數列,如果檔案過多可能會執行失敗!
註5: 使用 xargs 可確保後面的程式 ( rm ) 只執行一次,所以理論上執行速度較快!
相同參數需輸入多筆並且以「或」邏輯運算時要用 –o 參數串接起來
例1:同時找兩種檔名樣式的檔案
find $HOME -name '*.mp3' -o -user '*.ogg'
find /usr/local -user user1 -o -user user2
【 注意事項 】
- 使用萬用字元時務必加上單引號( ' )
!!以下是錯誤示範!!
[user1@server ~]# find $HOME -name *.txt
find: paths must precede expression
Usage: find [path...] [expression]
相關連結
沒有留言:
張貼留言