[Linux] find命令高級用法 -exec參數 -ok參數

[Linux] find命令高級用法----exec

find命令是linux下一個強大的查找命令。與locate命令相比,它需要遍歷磁盤文件,因此查找速度較慢,但正因如此,它的實時性比locate好得多。另外一方面,find命令的查找條件比locate豐富得多。

以名稱爲條件

最常用的恐怕就是以文件名爲條件了,涉及參數-name,-iname,例如:
當前目錄下查找以sort開頭的文件:

$ find /Users/pobing/Pobing -iname 'T.txt'
/Users/pobing/Pobing/t.txt

$ find /Users/pobing/Pobing -name 't*'
/Users/pobing/Pobing/t1.txt
/Users/pobing/Pobing/t2.txt
/Users/pobing/Pobing/t.txt

以權限爲條件

有時候需要查找特定權限的文件,可以使用-perm參數,例如查找當前目錄下權限爲777的文件:

$ find /Users/pobing/Pobing -perm 777
/Users/pobing/Pobing/t.txt

以文件類型爲條件

涉及參數-type,例如要查找當前目錄下的符號鏈接文件:

$ find /Users/pobing/Pobing -type d
/Users/pobing/Pobing
/Users/pobing/Pobing/t3

常有參數有

f 普通文件
d 目錄
b 塊設備文件
c 字符設備文件
l 符號鏈接
s 套接字
p 管道文件

以文件大小爲條件

參數爲 -size

$ find /Users/pobing/Pobing -size +1k
/Users/pobing/Pobing/t2.txt

常用參數有

k 千字節
M 兆字節
G 吉字節
c 字節
b 塊,一般爲512字節
w 字大小,兩個字節

以歸屬爲條件

涉及參數-user,-nouser,-group,-nogroup等,例如:

find ./ -user root  #查找當前目錄下root用戶的文件
find ./ -nouser   #查找當前目錄下root用戶的被刪除的文件

-group,-nogroup類似的用法,只不過條件是用戶組。

以時間爲條件

涉及參數-mtime,-atime,-ctime,-newer,-anewer,-cnewer,-amin,-cmin等,例如:

find ./ -mtime 3 #查找3天前更改過的文件
find ./ -mtime -3 #查找3天內更改過的文件
find ./ -mtime 0 #查找今天更改過的文件
find ./ -newer sort.txt #查找比sort.txt修改時間更新的文件
find ./ -anewer sort.txt #查找比sort.txt訪問時間更新的文件
find ./ -amin  5 #查找5分鐘之前訪問過的文件

注:

atime 最後訪問時間
mtime 最後修改時間
ctime 最後修改時間,這裏包括屬性和權限

exec

-exec 參數後面跟的是command命令,它的終止是以;爲結束標誌的,所以這句命令後面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義,所以前面加反斜槓。
{} 花括號代表前面find查找出來的文件名。
使用find時,只要把想要的操作寫在一個文件裏,就可以用exec來配合find查找,很方便的。在有些操作系統中只允許-exec選項執行諸如l s或ls -l這樣的命令。大多數用戶使用這一選項是爲了查找舊文件並刪除它們。建議在真正執行rm命令刪除文件之前,最好先用ls命令看一下,確認它們是所要刪除的文件。 exec選項後面跟隨着所要執行的命令或腳本,然後是一對兒{ },一個空格和一個\,最後是一個分號。爲了使用exec選項,必須要同時使用print選項。如果驗證一下find命令,會發現該命令只輸出從當前路徑起的相對路徑及文件名。

  • 把ls 放到exec中
#find /home/data/mydb/log/ -name 'slow*' -o -name '*bin*' -exec ls -al {} \;
-rw-rw---- 1 mysql mysql 1073742330 Sep 30 15:42 /home/data/mydb/log/mysql-bin.000020
-rw-rw---- 1 mysql mysql 180 Oct  8 10:04 /home/data/mydb/log/mysqld-relay-bin.index
-rw-rw---- 1 mysql mysql 396327289 Oct 10 10:23 /home/data/mydb/log/mysql-bin.000022
-rw-rw---- 1 mysql mysql 111 Oct  8 10:04 /home/data/mydb/log/mysql-bin.index
  • 查找更改爲5天前的文件並刪除
find/logs -type f -mtime +5 -exec rm {} \ ;

在Shell中用任何方式刪除文件之前,應當先查看相應的文件,一定要小心使用諸如mv或rm的命令。可以使用安全模式-ok,它將在對每個匹配到的文件進行操作之前提示你。

  • find命令在當前目錄中查找所有文件名以.log結尾、更改時間在5日以上的文件,並刪除它們,只不過在刪除之前先給出提示。命令如下所示:
find . -name "*.log" -mtime +5 -ok rm {} \ ;
按[y]鍵刪除文件,按[n]鍵不刪除。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章