1. 程式人生 > >Linux find,grep命令

Linux find,grep命令

訪問時間 字符 查找 tex 一次 文件大小 自己 大小寫 0kb

find使用:

列出當前目錄及子目錄下所有文件和文件夾

find .

/home目錄下查找以.txt結尾的文件名

find /home -name "*.txt"

同上,但忽略大小寫

find /home -iname "*.txt"

當前目錄及子目錄下查找所有以.txt和.pdf結尾的文件

find . \( -name "*.txt" -o -name "*.pdf" \)

或

find . -name "*.txt" -o -name "*.pdf" 

匹配文件路徑或者文件

find /usr/ -path "*local*"

基於正則表達式匹配文件路徑

find . -regex ".*\(\.txt\|\.pdf\)$"

同上,但忽略大小寫

find . -iregex ".*\(\.txt\|\.pdf\)$"

否定參數

找出/home下不是以.txt結尾的文件

find /home ! -name "*.txt"

根據文件類型進行搜索

find . -type 類型參數

類型參數列表:

  • f 普通文件
  • l 符號連接
  • d 目錄
  • c 字符設備
  • b 塊設備
  • s 套接字
  • p Fifo

基於目錄深度搜索

向下最大深度限制為3

find . -maxdepth 3
-type f

搜索出深度距離當前目錄至少2個子目錄的所有文件

find . -mindepth 2 -type f

根據文件時間戳進行搜索

find . -type f 時間戳

UNIX/Linux文件系統每個文件都有三種時間戳:

  • 訪問時間(-atime/天,-amin/分鐘):用戶最近一次訪問時間。
  • 修改時間(-mtime/天,-mmin/分鐘):文件最後一次修改時間。
  • 變化時間(-ctime/天,-cmin/分鐘):文件數據元(例如權限等)最後一次修改時間。

搜索最近七天內被訪問過的所有文件

find . -type f -atime -7

搜索恰好在七天前被訪問過的所有文件

find . -type f -atime 7

搜索超過七天內被訪問過的所有文件

find . -type f -atime +7

搜索訪問時間超過10分鐘的所有文件

find . -type f -amin +10

找出比file.log修改時間更長的所有文件

find . -type f -newer file.log

根據文件大小進行匹配

find . -type f -size 文件大小單元

文件大小單元:

  • b —— 塊(512字節)
  • c —— 字節
  • w —— 字(2字節)
  • k —— 千字節
  • M —— 兆字節
  • G —— 吉字節

搜索大於10KB的文件

find . -type f -size +10k

搜索小於10KB的文件

find . -type f -size -10k

搜索等於10KB的文件

find . -type f -size 10k

刪除匹配文件

刪除當前目錄下所有.txt文件

find . -type f -name "*.txt" -delete

根據文件權限/所有權進行匹配

當前目錄下搜索出權限為777的文件

find . -type f -perm 777

找出當前目錄下權限不是644的php文件

find . -type f -name "*.php" ! -perm 644

找出當前目錄用戶tom擁有的所有文件

find . -type f -user tom

找出當前目錄用戶組sunk擁有的所有文件

find . -type f -group sunk

借助-exec選項與其他命令結合使用

找出當前目錄下所有root的文件,並把所有權更改為用戶tom

find .-type f -user root -exec chown tom {} \;

上例中,{} 用於與-exec選項結合使用來匹配所有文件,然後會被替換為相應的文件名。

找出自己家目錄下所有的.txt文件並刪除

find $HOME/. -name "*.txt" -ok rm {} \;

上例中,-ok-exec行為一樣,不過它會給出提示,是否執行相應的操作。

查找當前目錄下所有.txt文件並把他們拼接起來寫入到all.txt文件中

find . -type f -name "*.txt" -exec cat {} \;> all.txt

將30天前的.log文件移動到old目錄中

find . -type f -mtime +30 -name "*.log" -exec cp {} old \;

找出當前目錄下所有.txt文件並以“File:文件名”的形式打印出來

find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;

因為單行命令中-exec參數中無法使用多個命令,以下方法可以實現在-exec之後接受多條命令

-exec ./text.sh {} \;

搜索但跳出指定的目錄

查找當前目錄或者子目錄下所有.txt文件,但是跳過子目錄sk

find . -path "./sk" -prune -o -name "*.txt" -print

find其他技巧收集

要列出所有長度為零的文件

find . -empty

https://blog.csdn.net/ydfok/article/details/1486451

http://man.linuxde.net/find

Linux find,grep命令