歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> Linux中如何巧妙運用find命令

Linux中如何巧妙運用find命令

日期:2017/3/2 10:33:16   编辑:Linux維護

我們都知道Linux下查找文件的命令是find命令,運用該命令可以很快的搜到自己想要的文件,那麼find命令有哪些使用技巧呢?下面小編就給大家介紹下Linux中find命令的巧妙運用。

find命令的工作方式是沿著文件層次結構向下遍歷,匹配符合條件的文件,並執行相應的操作。

1、根據文件名或正則表達式匹配搜索

選項-name的參數指定了文件名所必須匹配的字符串,我們可以將通配符作為參數使用,“*.txt”匹配所有以.txt結尾的文件名。

代碼如下:

[root@localhost test]# touch {data,log,file,File,LOG}_{1,2,3,4,5,6}_{.txt,.pdf,.log,.conf}

[root@localhost test]# find 。 -name “*.txt” –print

如果想匹配多個條件中的一個,可以使用-o參數。

代碼如下:

[root@localhost test]# find 。 \( -name “*.txt” -o -name “*.log” \)

選項-iname忽略字母大小寫

選項-path的參數可以使用通配符來匹配文件路徑或文件。

2、否定參數

find 用 “!”來否定參數,匹配所有不以.txt結尾的文件名。

代碼如下:

[root@localhost test]# find 。 ! -name “*.txt” –print

3、基於目錄深度的搜索

find命令在使用時會遍歷所有的子目錄,我們可以采用-maxdepth和-mindepth來限制find命令遍歷的深度。

-maxdepth: 指定最大深度;

-mindepth:指定最小深度。

代碼如下:

[root@localhost ~]# find 。 -maxdepth 1 -type f

列出當前目錄的所有普通文件,這兩個命令要緊跟在目標路徑之後。

4、根據文件類型搜索

代碼如下:

find 。 –type d –print

文件類型類型參數普通文件f符號文件l目錄d字符設備c塊設備b套接字sfifop

5、根據文件時間進行搜索

Linux文件系統中每一個文件都有三種時間戳

訪問時間(-atime):用戶最近一次訪問文件的時間;

修改時間(-mtime):文件內容最後一次被修改的時間。

變化時間(-ctime):文件元數據(metadata,例如權限或所有權)最後一次改變的時間。

-atime,-mtime,-ctime作為時間參數,單位是天,可以使用+表示大於,-表示小於。

代碼如下:

[root@localhost ~]# find 。 -type f -atime 7

#打印出正好在7天前被訪問過的文件

[root@localhost ~]# find 。 -type f -mtime +7

#打印修改時間大於7天的文件

[root@localhost ~]# find 。 -type f -ctime -7

#打印出修改時間小於7天的文件

類似的參數還有,-amin(訪問時間),-mmin(修改時間),-cmin(變化時間),以分鐘為單位。

find另一個漂亮的特性是-newer參數,我們可以指定一個用於比較時間戳的參數文件,然後找出比參數文件更新的所有文件。

find 。 –type f –newer file.txt

p 在當前目錄找出比file.txt修改時間更長的所有文件。

6、基於文件大小的搜索

搜索可以使用的單位

b——塊(512字節); c——字節; w——字(2字節);

k——千字節 ; M——兆字節; G——吉字節。

代碼如下:

[root@localhost tmp]# find 。 -type f -size 2k

#等於2k的文件

[root@localhost tmp]# find 。 -type f -size +2k

#大於2k的文件

[root@localhost tmp]# find 。 -type f -size -2k

#小於2k的文件

7、刪除匹配的文件

-delete可以用來刪除find查找到的匹配文件。

代碼如下:

[root@localhost tmp]# find 。 -type f -name “.sWp” –delete

#刪除當前目錄下所有的.swp文件

8、基於文件權限和所有權的匹配

代碼如下:

[root@localhost tmp]# find 。 -type f -perm 644

#查找當前目錄權限為644的文件

[root@localhost tmp]# find 。 -type f -user reed

#查找當前目錄文件所有者為reed的文件

9、結合find 執行命令或動作

find命令可以借助選項-exec與其他命令進行結合。

代碼如下:

[root@localhost tmp]# find 。 -type f -user reed -exec chown cathy {} \;

#將當前目錄文件擁有者為reed的文件改為cathy

{ }是一個特殊的字符串,對於每一個匹配的文件,{ }會被替換成相應的文件名。

代碼如下:

[root@localhost test]# find 。 -type f -mtime +10 -name “*.log” -exec cp {} /data/bk_log \;

#將當前目錄大於10天的log文件復制到/data/bk_log目錄

[root@localhost test]# find /tmp/test/ -type f -name “*.txt” -exec printf “Text file: %s\n” {} \;

Text file: /tmp/test/File_6_.txt

Text file: /tmp/test/file_4_.txt

Text file: /tmp/test/data_3_.txt

Text file: /tmp/test/data_1_.txt

#列出目錄的所有txt文件

10、跳過指定的目錄

有時間我們查找時需要跳過一些子目錄

代碼如下:

[root@localhost test]# find 。 \( -name “jump_dir” -prune \) -o \( -type f -print \)

# \( -name “jump_dir” -prune \) 指定要跳過的子目錄的名字

上面就是Linux中巧妙運用find命令的方法介紹了,只要合理運用find命令,就能達到意想不到的效果,在使用Linux命令時,我們不僅要會用,還有學會怎麼用,你記住了嗎?

Copyright © Linux教程網 All Rights Reserved