成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

15個高級的Linux find命令示例

系統 Linux
本文中,讓我們來討論15高級find命令的例子, 包括-根據它訪問,修改或改變的時間查找文件,查找文件相比之下,執行操作找到的文件等,希望對大家有所幫助。

前陣子,我們審查了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. ./console 
  3. ./network-scripts 
  4. ./i18n 
  5. ./rhn 
  6. ./rhn/clientCaps.d 
  7. ./networking 
  8. ./networking/profiles 
  9. ./networking/profiles/default 
  10. ./networking/profiles/default/resolv.conf 
  11. ./networking/profiles/default/hosts 
  12. ./networking/devices 
  13. ./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 命令,用于統計計算文件的單詞數量,文件大小等待

#p#

執行任何Unix的shell命令

執行你自己寫的shell腳本,參數就是每個查找出來的文件名

例9:在find命令輸出上使用 ls -l, 列舉出1小時內被編輯過的文件的詳細信息

  1. # find -mmin -60 
  2. ./cron 
  3. ./secure 
  4. # find -mmin -60 -exec ls -l {} \; 
  5. -rw-------  1 root root 1028 Jun 21 15:01 ./cron 
  6. -rw-------  1 root root 831752 Jun 21 15:42 ./secure 

例10:僅僅在當前文件系統中搜索

系統管理員有時候僅僅想在/掛載的文件系統分區上搜索,而不想去搜索其他的掛載分區,比如/home/掛載分區。如果你有多個分區被掛載了,你想在/下搜索,一般可以按下面的這樣做

下面這個命令會搜索根目錄/及其子目錄下所有.log結尾的文件名。如果你有多個分區在/下面,那么這個搜索會去搜索所有的被掛載的分區:

  1. # find / -name "*.log" 

如果我們使用-xdev選項,那么僅僅會在在當前文件系統中搜索,下面是在xdev的man page上面找到的一段-xdev的定義:

  1. -xdev Don’t descend directories on other filesystems. 

下面的命令會在/目錄及其子目錄下搜索當前文件系統(也就是/掛載的文件系統)中所有以.log結尾的文件,也就是說如果你有多個分區掛載在/下面,下面的搜索不會去搜索其他的分區的(比如/home/)

  1. # find / -xdev -name "*.log" 

例11: 在同一個命令中使用多個{}

linux手冊說命令中只能使用一個{},不過你可以像下面這樣在同一個命令中使用多個{}

  1. # find -name "*.txt" cp {} {}.bkup \; 

注意,在同一個命令中使用這個{}是可以的,但是在不同的命令里就不行了,也就是說,如果你想象下面這樣重命名文件是行不通的

  1. find -name "*.txt" -exec mv {} `basename {} .htm`.html \; 

例12: 使用多個{}實例

你可以像下面這樣寫一個shell腳本去模擬上面那個重命名的例子

  1. # mv "$1" "`basename "$1" .htm`.html" 

上面的雙引號是為了防止文件名中出現的空格,不加的話會有問題。然后你把這個shell腳本保存為mv.sh,你可以像下面這樣使用find命令了

  1. find -name "*.html" -exec ./mv.sh '{}' \; 

所以,任何情況下你在find命令執行中想使用同一個文件名多次的話,先寫一個腳本,然后在find中通過-exec執行這個腳本,把文件名參數傳遞進去就行,這是最簡單的辦法

例13: 將錯誤重定向到/dev/nul

重定向錯誤輸出一般不是什么好的想法。一個有經驗的程序員懂得在終端顯示錯誤并及時修正它是很重要的。

尤其是在find命令中重定向錯誤不是個好的實踐。 但是如果你確實不想看到那些煩人的錯誤,想把錯誤都重定向到null設備中(也就是linux上的黑洞裝置,任何丟進去的東西消失的無影無蹤了)。你可以像下面這樣做:

  1. find -name "*.txt" 2>>/dev/null 

有時候這是很有用的。比如,如果你想通過你自己的賬號在/目錄下查找所有的*.conf文件,你會得到很多很多的"Permission denied"的錯誤消息, 就像下面這樣:

  1. $ find / -name "*.conf" 
  2. /sbin/generate-modprobe.conf 
  3. find: /tmp/orbit-root: Permission denied 
  4. find: /tmp/ssh-gccBMp5019: Permission denied 
  5. find: /tmp/keyring-5iqiGo: Permission denied 
  6. find: /var/log/httpd: Permission denied 
  7. find: /var/log/ppp: Permission denied 
  8. /boot/grub/grub.conf 
  9. find: /var/log/audit: Permission denied 
  10. find: /var/log/squid: Permission denied 
  11. find: /var/log/samba: Permission denied 
  12. find: /var/cache/alchemist/printconf.rpm/wm: Permission denied 
  13. [Note: There are two valid *.conf files burned in the "Permission denied" messages] 

你說煩人不?所以,如果你只想看到find命令真實的查找結果而不是這些"Permission denied"錯誤消息,你可以將這些錯誤消息重定向到/dev/null中去

  1. $ find / -name "*.conf" 2>>/dev/null 
  2. /sbin/generate-modprobe.conf 
  3. /boot/grub/grub.conf 
  4. [Note: All the "Permission denied" messages are not displayed] 

例14: 將文件名中的空格換成下劃線

你從網上下載下來的音頻文件的文件名很多都帶有空格。但是帶有空格的文件名在linux(類Unix)系統里面是很不好的。你可以使用find然后后面加上rename命令的替換功能去重命名這些文件,將空格轉換成下劃線。

下面顯示怎樣將所有mp3文件的文件名中的空格換成_

  1. $ find . -type f -iname “*.mp3″ -exec rename “s/ /_/g” {} \; 

例15: 在find結果中同時執行兩條命令

在find的man page頁面中,下面是一次文件查找遍歷中使用兩條命令的語法舉例

下面的find命令的例子,遍歷文件系統一次,列出擁有setuid屬性的文件和目錄,寫入/root/suid.txt文件, 如果文件大小超過100M,將其記錄到/root/big.txt中

  1. # find / \( -perm -4000 -fprintf /root/suid.txt '%#m %u %p\n' \) , \ 
  2. \( -size +100M -fprintf /root/big.txt '%-10s %p\n' \) 

Find命令示例(***部分)

若你喜歡這篇關于find命令的Daddy文章,別忘了看看***部分的關于find命令的Mommy文章:15個實用的Linux find命令示例

原文鏈接:http://www.thegeekstuff.com/2009/06/15-practical-unix-linux-find-command-examples-part-2/

責任編輯:黃丹 來源: oschina
相關推薦

2013-10-08 15:51:03

Linux find命

2015-03-25 10:36:57

lsLinux

2020-05-20 13:45:52

Linuxtouch命令

2020-04-16 14:20:16

Linuxtouch命令

2022-11-02 08:32:46

find 命令Linux

2010-06-09 10:35:36

MySQL使用管理命令

2017-12-27 09:40:32

Linuxfind命令

2020-09-29 07:18:24

Linuxtee命令

2013-05-23 15:10:34

Netcat

2009-08-03 09:20:18

find命令詳解find命令linux find命

2017-02-27 20:24:27

Linux文件傳輸命令

2009-08-03 10:12:37

find命令詳解find命令linux

2012-05-11 10:07:55

Linuxfind

2018-05-02 13:40:51

Linux命令touch

2023-07-12 23:41:04

Linuxfind

2010-03-18 16:34:33

Linux命令

2018-08-06 08:51:32

Linux命令cut

2022-08-29 08:33:22

SocatLinux命令

2023-10-30 09:02:24

2010-03-09 13:54:05

Linux find命
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩精品免费在线观看 | 艹逼网| 国产一二区视频 | 亚洲精品视频在线播放 | 国产一区二区三区www | 中文字幕精品一区 | 国产69精品久久99不卡免费版 | 日本在线免费看最新的电影 | 99影视| 99精品亚洲国产精品久久不卡 | 爱操影视 | 国产精品国产三级国产aⅴ无密码 | 波多野结衣一区二区三区在线观看 | 久久中文字幕一区 | 欧美日日日日bbbbb视频 | 国产美女在线观看 | 中文字幕亚洲在线 | 亚洲天堂一区二区 | 一区二区欧美在线 | 国产精品成人av | 久热免费 | 免费看欧美一级片 | 国产在线观看一区二区三区 | 99热这里都是精品 | 国产精品一区在线 | 亚洲一区视频 | 亚洲国产精品网站 | 免费视频久久 | 欧美日韩一区在线播放 | av在线天堂| 欧美专区在线 | 日韩精品在线视频免费观看 | 国产一区二区三区四区 | 日韩电影一区 | 国产欧美精品一区二区三区 | 美女黄18岁以下禁止观看 | 国产精品久久久久久久久久免费看 | 欧美伦理一区 | 国产午夜久久 | 农夫在线精品视频免费观看 | 日韩成人在线免费视频 |