歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 15個高級的Linux find命令示例

15個高級的Linux find命令示例

日期:2017/2/28 14:43:02   编辑:Linux教程

前陣子,我們審查了15件實事 find命令的例子(第一部分)。查找命令可以做很多比只是在尋找基於名稱的文件 (第2部分)在這篇文章中,讓我們來討論15高級find命令的例子, 包括-根據它訪問,修改或改變的時間查找文件,查找文件相比之下,執行操作找到的文件等。

基於訪問/修改/更改時間查找文件

你可以找到基於以下三個文件的時間屬性的文件。

  • 訪問時間的文件。文件訪問時,訪問時間得到更新。
  • 文件的修改時間。文件內容修改時,修改時間得到更新。
  • 更改文件的時間。更改時間時,被更新的inode數據的變化。

在下面的例子中,min選項之間的差異和時間選項是參數。

  • 分論點將它的參數為分鐘。例如,60分鐘(1小時)= 60分鐘。
  • 時間參數,將它的參數為24小時。例如,時間2 = 2 * 24小時(2天)。
  • 雖然這樣做的24個小時計算,小數部分都將被忽略,所以25小時為24小時,和47小時取為24小時,僅48小時為48小時。要獲得更清晰的參考atime的部分find命令的手冊頁。

例1:找到在1個小時內被更改的文件

想要通過文件修改時間找出文件,可以使用參數 -mmin -mtime。下面是man手冊中有關mmin和mtime的定義。

  • -mmin n 文件最後一次修改是在n分鐘之內
  • -mtime n 文件最後一次修改是在 n*24小時之內(譯者注:也就是n天了呗)

執行下面例子中的命令,將會找到當前目錄以及其子目錄下,最近一次修改時間在1個小時(60分鐘)之內的文件或目錄

  1. # find . -mmin -60

同樣的方式,執行下面例子中的命令,將會找到24小時(1天)內修改了的文件(文件系統根目錄 / 下)

  1. # find / -mtime -1

例2:找到1個小時內被訪問過的文件

想要通過文件訪問時間找出文件,可以使用參數 -amin -atime。下面是man手冊中有關amin和atime的定義。

  • -amin n 文件最後一次訪問是在n分鐘之內
  • -atime n 文件最後一次訪問是在 n*24小時之內

執行下面例子中的命令,將會找到當前目錄以及其子目錄下,最近一次訪問時間在1個小時(60分鐘)之內的文件或目錄

  1. # find . -amin -60

同樣的方式,執行下面例子中的命令,將會找到24小時(1天)內被訪問了的文件(文件系統根目錄 / 下)

  1. # find / -atime -1

例3:查找一個小時內狀態被改變的文件

(譯者注:這裡的改變更第1個例子的更改文件內容時間是不同概念,這裡是更改的是文件inode的數據,比如文件的權限,所屬人等等信息)

要查找文件的inode的更改時間,使用-cmin和-ctime選項。

  • -cmin n 文件的狀態在n分鐘內被改變
  • -ctime n 文件狀態在n*24小時內(也就是n天內)被改變

(譯者注:如果上面的n為-n形式,則表示n分鐘/天之內,n為+n則表示n分鐘/天之前)

下面的例子在當前目錄和其子目錄下面查找一個小時內文件狀態改變的文件(也就是60分鐘內):

  1. # find . -cmin -60

同樣的道理,下面的例子在根目錄/及其子目錄下一天內(24小時內)文件狀態被改變的文件列表:

  1. # find / -ctime -1

例4:搜索僅僅限定於文件,不顯示文件夾

上面的例子搜索出來不僅僅有文件,還會顯示文件夾。因為當一個文件被訪問的時候,它所處的文件夾也會被訪問,如果你對文件夾不感興趣,那麼可以使用 -type f 選項

下面的例子會顯示30分鐘內被修改過的文件,文件夾不顯示:

  1. # find /etc/sysconfig -amin -30
  2. .
  3. ./console
  4. ./network-scripts
  5. ./i18n
  6. ./rhn
  7. ./rhn/clientCaps.d
  8. ./networking
  9. ./networking/profiles
  10. ./networking/profiles/default
  11. ./networking/profiles/default/resolv.conf
  12. ./networking/profiles/default/hosts
  13. ./networking/devices
  14. ./apm-scripts

[注: 上面的輸出包含了文件和文件夾]

  1. # find /etc/sysconfig -amin -30 -type f
  2. ./i18n
  3. ./networking/profiles/default/resolv.conf
  4. ./networking/profiles/default/hosts

[注: 上面的輸出僅僅包含文件]

例5: 僅僅查找非隱藏的文件(不顯示隱藏文件):

如果我們查找的時候不想隱藏文件也顯示出來,可以使用下面的正則式查找:

下面的命令會顯示當前目錄及其子目錄下15分鐘內文件內容被修改過的文件,並且只列出非隱藏文件。也就是說,以.開頭的文件時不會顯示出來的

  1. # find . -mmin -15 \( ! -regex ".*/\..*" \)

基於文件比較的查找命令

我們平時通過更別的東西進行比較,會更容易記住一些事情。比如說我想找出在我編輯test文件之後編輯過的文件。你可以通過test這個文件的編輯時間作為比較基准去查找之後編輯過的文件:

例6: 查找文件修改時間在某一文件修改後的文件:

語法: find -newer FILE

下面的例子顯示在/etc/passwd修改之後被修改過的文件。對於系統管理員,想知道你新增了一個用戶後去跟蹤系統的活動狀態是很有幫助的(萬一那新用戶不老實,一上來就亂搞,你很快就知道了 ^_^):

  1. # find -newer /etc/passwd

例7:查找文件訪問時間在某一文件的修改時間之後的文件:

  1. # find -newer /etc/passwd

下面的例子顯示所有在/etc/hosts文件被修改後被訪問到的文件。如果你新增了一個主機/端口記錄在/etc/hosts文件中,你很可能很想知道在那之後有什麼文件被訪問到了,下面是這個命令:

  1. # find -anewer /etc/hosts

例8:查找狀態改變時間在某個文件修改時間之後的文件:

語法: find -cnewer FILE

下面的例子顯示在修改文件/etc/fstab之後所有文件狀態改變過的文件。如果你在/etc/fstab新增了一個掛載點,你很可能想知道之後哪些文件的狀態發生了改變,這時候你可以使用如下命令:

  1. # find -cnewer /etc/fstab

在查找到的文件列表結果上直接執行命令:

這之前你已經看到了如果通過find命令去查找各種條件的文件列表。如果你對這些find命令還不熟悉,我建議你看完上面的第一部分

接下來這部分我們向你介紹如果在find命令上執行各種不同的命令,也就是說如何去操作find命令查找出來的文件列表。

我們能在find命令查找出來的文件名列表上指定任意的操作:

  1. # find <CONDITION to Find files> -exec <OPERATION> \;

其中的OPERATION可以是任意的命令,下面列舉一下比較常用的:

  • rm 命令,用於刪除find查找出來的文件
  • mv 命令,用於重命名查找出的文件
  • ls -l 命令,顯示查找出的文件的詳細信息
  • md5sum, 對查找出的文件進行md5sum運算,可以獲得一個字符串,用於檢測文件內容的合法性
  • wc 命令,用於統計計算文件的單詞數量,文件大小等待
Copyright © Linux教程網 All Rights Reserved