日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[一文一命令]find命令详解

發(fā)布時(shí)間:2023/12/31 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [一文一命令]find命令详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Find命令

名稱find - search for files in a directory hierarchy

語(yǔ)法find [-H] [-L] [-P] [path...] [expression]

命令參數(shù):

Pathname ? ?find命令所查找的目錄路徑。

-print ? ? ?find將匹配的文件的輸出到標(biāo)準(zhǔn)輸出中-->默認(rèn)查找到不打印出來(lái)

-exec ? ? ? find命令對(duì)匹配的文件執(zhí)行該參數(shù)所給出的shell命令。相應(yīng)的形式為‘command{} \---》也就是說(shuō)我們用這個(gè)參數(shù)能夠?qū)ξ覀冇胒ind找出來(lái)的文件進(jìn)行操作。

-ok ? ? ? ? exec的作用相同只不過(guò)是以一種更為安全的模式來(lái)執(zhí)行該參數(shù)所給出的shell命令。在執(zhí)行每一個(gè)命令之前都會(huì)給出提示讓用戶來(lái)確定是否執(zhí)行。

命令選項(xiàng)

-name ? ? ? 按照文件的文件名來(lái)查找文件

-perm ? ? ? 按照文件權(quán)限來(lái)查找文件

-prune ? ? ?可以讓find命令不在當(dāng)前目錄里面查找

-user ? ? ? 按照文件所屬的擁有者來(lái)查找

-group ? ? ?按照文件所屬的用戶組來(lái)查找

-nogroup ? ?查找無(wú)有效所屬組的文件即用戶組不在/etc/groups文件里面。

-nouser ? ? 查找無(wú)有效用戶的文件

-type ? ? ? 查找某一類型的文件

? ? ? d ?目錄

? ? ? f ?普通文件

? ? ? l ?符號(hào)鏈接文件

? ? ? c ?字符設(shè)備文件

? ? ? b ?塊設(shè)備文件

-size n ? ?查找文件長(zhǎng)度為n快的文件帶c時(shí)表示文件長(zhǎng)度以字節(jié)計(jì)。

-fstype ? ?查找位于某一類型文件系統(tǒng)中的文件。

-mount ? ? 在查找文件時(shí)不跨越文件系統(tǒng)mount點(diǎn)

-follow ? ?如果find命令遇到符號(hào)鏈接文件就跟蹤至鏈接所指向的文件

-cpio ? ? ?對(duì)匹配的文件使用cpio命令將這些文件備份到磁帶設(shè)備中。

a:access訪問(wèn) ? c:change變更 ? m:modified改動(dòng)

-amin n ? ? 查找系統(tǒng)中最后N分鐘訪問(wèn)(access)的文件

-atime n ? ?查找系統(tǒng)中最后n 天前訪問(wèn)的文件 ? -n表示在n天內(nèi)+n表示在n天前其余類似。

-cmin n ? ? 查找系統(tǒng)最后n分鐘被改變(change)文件狀態(tài)的文件

-ctime n ? ?查找系統(tǒng)中最后n*24小時(shí)被改動(dòng)過(guò)文件狀態(tài)的文件

-mmin n ? ? 查找系統(tǒng)中最后n分鐘被改動(dòng)(modified)過(guò)文件數(shù)據(jù)的文件

-mtime n ? ?查找系統(tǒng)中最后n*24小時(shí)被改變文件數(shù)據(jù)的文件-n ?+n 按照文件所更改的時(shí)間來(lái)查找文件-n 表示更改在n天內(nèi)的+n表示更改在n天前的。


使用實(shí)例

查找指定時(shí)間內(nèi)的文件

[root@LiWenTong test]# find -amin ?-1 à訪問(wèn)時(shí)間為1天內(nèi)的文件。--》錯(cuò)了應(yīng)該是1分鐘吧。寫(xiě)博文的時(shí)候發(fā)現(xiàn)的。

./test1

./test1/test2


查找創(chuàng)建時(shí)間在最近的。c:change ?改變文件狀態(tài)的。

find -ctime -19


根據(jù)關(guān)鍵字查找

[root@LiWenTong test]# find -name *.log

./2.log


根據(jù)權(quán)限、類型來(lái)查找文件

[root@LiWenTong test]# find / -perm 777 -name *.log

/root/test/2.log

[root@LiWenTong test]# find / -perm 777 -type d

find: /proc/4435/task/4435/fd/4: No such file ordirectory

find: /proc/4435/task/4435/fdinfo/4: No such fileor directory

find: /proc/4435/fd/4: No such file or directory

find: /proc/4435/fdinfo/4: No such file ordirectory

/root/test/test1

[root@LiWenTong test]# find /root/ -type d

/root/

/root/test

/root/test/test1

/root/test/test1/test2

[root@LiWenTong test]# find /root/ -type f

/root/.cshrc

/root/2.log

/root/.bash_logout

/root/3.log

/root/1.log

/root/test.txt

/root/2lo

--->查找用戶

find -user root

find -type ?f文件 ?d目錄

------以下是一些實(shí)例----

$find ? ~ ? -name ? "*.txt" ? -print ? ?#在$HOME中查.txt文件并顯示
$find ? . ? ?-name ? "*.txt" ? -print
$find ? . ? ?-name ? "[A-Z]*" ? -print ? #查以大寫(xiě)字母開(kāi)頭的文件
$find ? /etc ? -name ? "host*" ? -print #查以host開(kāi)頭的文件
$find ? . ? -name ? "[a-z][a-z][0–9][0–9].txt" ? ?-print ? #查以兩個(gè)小寫(xiě)字母和兩個(gè)數(shù)字開(kāi)頭的txt文件
$find . ? -perm ? 755 ? -print
$find ? . ? -perm -007 ? -exec ls -l {} \; ? #查所有用戶都可讀寫(xiě)執(zhí)行的文件同-perm 777
$find ? . -type d ? -print
$find ? . ? ! ? -type ? d ? -print
$find ? . ? -type l ? -print

$find ? . ? -size ? +1000000c ? -print ? ? ? ?#查長(zhǎng)度大于1Mb的文件
$find ? . ? -size ? 100c ? ? ? ? -print ? ? ? # 查長(zhǎng)度為100c的文件
$find ? . ? -size ? +10 ? -print ? ? ? ? ? ? ?#查長(zhǎng)度超過(guò)期作廢10塊的文件1塊=512字節(jié)

$cd /
$find ? etc ? home ? apps ? ?-depth ? -print ? | cpio ? -ivcdC65536 ? -o ? /dev/rmt0
$find ? /etc -name "passwd*" ? -exec grep ? "cnscn" ? {} ? \; ? #看是否存在cnscn用戶
$find . -name "yao*" ? | xargs file
$find ? . -name "yao*" ? | ? xargs ? echo ? ?"" > /tmp/core.log
$find ? . -name "yao*" ? | xargs ? chmod ? o-w


-----小結(jié)-------------------------------------------------------------------------------

? ?find命令能夠找到我們想找的任何文件,因?yàn)槲覀兡軌蛟O(shè)定的參數(shù)有很多。如最簡(jiǎn)單的文件名-name 用戶 -user 類型 -type f d l 。修改、訪問(wèn)的時(shí)間也能夠作為我們查找的參數(shù)。

? ?并且我們能對(duì)找到的文件進(jìn)行的操作,只要后面加上-exec參數(shù)。當(dāng)然這個(gè)我們后面再講將怎么操作查找到的文件。現(xiàn)在先說(shuō)怎么找到我們想要的文件。名稱查找是否能夠用正則表達(dá)式,還需要驗(yàn)證下。接下來(lái)就來(lái)講如何對(duì)我們查找到的文件進(jìn)行操作。

----------------------------------------------------------------------------------------

Find命令之-exec選項(xiàng)


用法簡(jiǎn)述:

使用find命令查找出來(lái)的文件有時(shí)候需要做一定的處理。我們通過(guò)加上-exec選項(xiàng),并在后面跟上command命令就可以對(duì)我們所查找到的文件進(jìn)行操作。格式為:-exec command {} \; {}代表的是find查找出來(lái)的文件名此處存有疑問(wèn)--》后經(jīng)驗(yàn)證確實(shí)是{}代表find找出來(lái)的文件,而不是{} \;代表找到的文件。


1)查找文件類型并修改權(quán)限

[root@LiWenTong test]# find /root/test -type f -exec ls -l {} \;

--->find /root/test -type f ?-name *.log -print ?

---->有時(shí)候?yàn)榱吮WC-exec執(zhí)行正確可以通過(guò)-print 或ls先把find查找的文件輸出查看下是否是我們需要操作的文件以保誤操作。--->這個(gè)就是為了在做操作之前先知道下我們要的文件是不是我們想要的。

-rwxrwxrwx 1 root root 26 Apr 29 02:13/root/test/2.log

-rwxrwxrwx 1 root root 43 Apr 29 02:12/root/test/test1/1.log

-rwxrwxrwx 1 root root 22 Apr 29 02:14/root/test/test1/test2/3.log

[root@LiWenTong test]# find /root/test -type f -exec chmod 755 {} \;


-------exec選項(xiàng)后接的命令講解------------------

? ?-exec后面的命令怎么接命令,有些同學(xué)可能還不能直觀的理解過(guò)來(lái)。其實(shí)很好理解,我們?cè)镜牟僮髅罡袷绞鞘裁礃拥默F(xiàn)在的格式還是什么樣的。只是當(dāng)你需要用到查找出的文件的時(shí)候,就用{}待入就是了。

? ?比如要?jiǎng)h除一個(gè)文件:rm ?-f ?filename 這個(gè)是rm原來(lái)的格式,那現(xiàn)在是我們要?jiǎng)h除找出來(lái)的文件,帶入就變成 ?rm -f {},但要記住最后要用\;結(jié)束。如果是mv命令呢?原本 mv old.file ?/tmp 代入后變 mv {} /tmp \;還是mv {} \; /tmp 呢?

? ?---》以上的問(wèn)題驗(yàn)證確實(shí)是{}代表find找到的文件后文有實(shí)例。也就是應(yīng)該是:mv ?old.file {} /tmp \;

-----------------------------------------


2)在當(dāng)前目錄下查找數(shù)據(jù)修改1天內(nèi)的文件

[root@LiWenTong test]# find -type f -mtime -1 -exec ls -l {} \;

-rwxr-xr-x 1 root root 26 Apr 29 02:13 ./2.log

-rwxr-xr-x 1 root root 43 Apr 29 02:12./test1/1.log

-rwxr-xr-x 1 root root 22 Apr 29 02:14./test1/test2/3.log

[root@LiWenTong test]# find -type f -mtime -1 -exec rm -f {} \;

[root@LiWenTong test]# ll

total 4

drwxrwxrwx 3 root root 4096 Apr 29 04:01 test1


3)使用-ok 選項(xiàng)較為安裝的執(zhí)行命令

使用-ok選項(xiàng)同-exec一樣只是在做相應(yīng)的操作時(shí)會(huì)有提示。

[root@LiWenTong test]# find /root/test -type d -mtime -1 -ok rm {} \;

< rm ... /root/test > ? y

rm: cannot remove `/root/test': Is a directory

< rm ... /root/test/test1 > ? y

rm: cannot remove `/root/test/test1': Is adirectory

< rm ... /root/test/test1/test2 > ? y

rm: cannot remove `/root/test/test1/test2': Is adirectory


4)-exec使用grep選項(xiàng)

[root@LiWenTong test]# find ?/etc -name "passwd" -exec grep"root" {} \;

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

說(shuō)明任何形式的命令都可以在-exec選項(xiàng)中使用。---》這個(gè)說(shuō)明很強(qiáng)勁哦,在系統(tǒng)中能夠?qū)ξ募M(jìn)行操作的命令都能夠在這里使用的。注意咯!


5)使用find查找文件并將移動(dòng)指定的目錄下。

[root@LiWenTong tmp]# ll log_mv

total 0

-rw-r--r-- 1 root root 0 Apr 29 07:08 1.log

-rw-r--r-- 1 root root 0 Apr 29 07:08 2.log

-rw-r--r-- 1 root root 0 Apr 29 07:08 3.log

-rw-r--r-- 1 root root 0 Apr 29 07:08 4.log

[root@LiWenTong tmp]# find /tmp/log_mv ?-name"*.log" ?-exec mv {} /root/test/ \;

[root@LiWenTong tmp]# ll /root/test--à需要記住{}是find查找出來(lái)的文件那么-exec的命令就需要對(duì)應(yīng)的把位置放好。因?yàn)橹袄鲜菍?xiě)成 ?mv /root/test/ {} \; 如果帶入來(lái)看 這個(gè)mv命令來(lái)說(shuō)就是錯(cuò)誤的。

total 4

-rw-r--r-- 1 root root ? ?0 Apr 29 07:01 1

-rw-r--r-- 1 root root ? ?0 Apr 29 07:08 1.log

-rw-r--r-- 1 root root ? ?0 Apr 29 07:08 2.log

-rw-r--r-- 1 root root ? ?0 Apr 29 07:08 3.log

-rw-r--r-- 1 root root ? ?0 Apr 29 07:08 4.log

drwxr-xr-x 3 root root 4096 Apr 29 07:05 test1


Find命令之xargs選項(xiàng)

功能簡(jiǎn)述:

? ?在使用-exec選項(xiàng)進(jìn)行文件處理時(shí),有些系統(tǒng)對(duì)傳給-exec的命令長(zhǎng)度有限制。如果太長(zhǎng)在執(zhí)行時(shí)會(huì)溢出錯(cuò)誤、或出現(xiàn)參數(shù)太長(zhǎng)的錯(cuò)誤。-exec是一次性的獲取傳來(lái)的參數(shù)-xargs是分多次的獲取傳來(lái)的參數(shù)每次獲取多少還是一次獲取是根據(jù)該命令的選項(xiàng)及系統(tǒng)的內(nèi)核中相應(yīng)的可調(diào)參數(shù)決定。并且-exec在處理命令時(shí)會(huì)發(fā)起一個(gè)相應(yīng)的進(jìn)程可能多個(gè)。而xargs則只有一個(gè)進(jìn)程[U2]如果通過(guò)-exec命令來(lái)執(zhí)行如果出現(xiàn)進(jìn)程很多的情況那么有可能會(huì)影響到系統(tǒng)的性能。


xargs如何從find命令中獲取結(jié)果

我們知道-exec選項(xiàng)是通過(guò){}來(lái)代入我們查找到的文件。那么我們的xargs又是如何獲取我們查找到的文件呢?其實(shí)格式有一下兩種:

1) find ?-type f | xargs ?rm ; ?看不到什么代入的{}而是直接xargs 接上命令。那是因?yàn)槟J(rèn)的xargs會(huì)將(stdin)標(biāo)準(zhǔn)輸入作為我們后面命令的參數(shù)。其實(shí)rm命令會(huì)接上在管道(|)之前的命令所產(chǎn)生的結(jié)果,也就是我們find查找出來(lái)的文件。那么也就相當(dāng)于是:rm ?查找的文件

2) find -type f ?|xargs -i mv {} /tmp;這種方式就有代入{}了,相應(yīng)的也多了個(gè)-i的參數(shù)。-i參數(shù)就是指定我們要用{}來(lái)作為find命令結(jié)果的替代。這個(gè)就和-exec沒(méi)啥區(qū)別咯。然后現(xiàn)在來(lái)看看以下的一些實(shí)例就可以了。


1)Find查找普通文件并通過(guò)xargs file命令來(lái)判斷文件的類型

[atong@LiWenTong tmp]$ find -type f | xargs file

find: ./test1/tmp/ssh-YmJglw2954: Permissiondenied

./1.txt.tar.gz: ? ? ? ? ? ? ? ? ? ? ? ? ? gzip compresseddata, from Unix, last modified: Thu May 2 20:14:25 2013

./2.txt: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ASCIItext

./tar.man: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?UTF-8 UnicodeEnglish text, with overstriking

./rc.sysinit: ? ? ? ? ? ? ? ? ? ? ? ? ? ? Bourne-Again shellscript text executable

./oldboy/test/test1/test2/test3/test.txt: empty


2)在系統(tǒng)中查找內(nèi)存信息轉(zhuǎn)存文件core dump然后把結(jié)果保存到/tmp/core.log中。

[atong@LiWenTong tmp]$ find / ?-name "core" | xargs echo"">>/tmp/core.l


3)在當(dāng)前目錄下查找所有用戶具有讀、寫(xiě)和執(zhí)行權(quán)限的文件并收回相應(yīng)的寫(xiě)權(quán)限

[atong@LiWenTong tmp]$ ?find -perm ?777 ?| sudo xargs chmod 744--->這里應(yīng)為atong沒(méi)有權(quán)限所以需要在xargs前面加上個(gè)sudo 要不會(huì)提示權(quán)限限制。^_^

-rwxr--r-- 1 root root ? ? 167 May ?2 20:16 1.tar.gz

-rwxr--r-- 1 root root ? ? ?45 May ?2 20:16 1.txt

-rwxr--r-- 1 atong atong ? ?152 May 2 20:14 1.txt.tar.gz

drwxr--r-- 2 root root ? ?4096 Apr 29 07:0620130425175009

-rwxr--r-- 1 root root ? ? ? 5 May ?2 21:41 2.txt

-rw-r--r-- 1 root root ? ? ? 0 May ?2 21:41 3.txt


4)用grep命令在所有的普通文件中搜索hostname這個(gè)詞

[root@LiWenTong tmp]# find ?-type f ? | xargs grep "good"

./1.log:good


5)使用xargs執(zhí)行mv

[root@LiWenTong test4]# find -name "*.log"| xargs ?-i ?mv{} test4---》此處的-i選項(xiàng)是表示默認(rèn)用{}來(lái)代表前面的輸出[U3]

[root@LiWenTong test4]# ll /tmp/test4

total 8

-rw-r--r-- 1 root root ? ?5 May ?3 04:12 1.log

-rw-rw-r-- 1 atong atong 619 May ?3 03:28 core.log

[root@LiWenTong test4]# find -name"*.log"| xargs ?-i-p mv {} test4--->-p選項(xiàng)是表示會(huì)提示讓你確認(rèn)是否執(zhí)行之后的操作。



[U1]find-exec

Find查找到的結(jié)果能夠再給-exec作為輸入再進(jìn)行相應(yīng)的處理。-exe的格式為-exec command {} \: ?其中{}代表的就是find出來(lái)的結(jié)果那具體放在command之后的哪個(gè)位置需要具體看是什么command

[U2]execxargs的區(qū)別》

Exec會(huì)有多個(gè)進(jìn)程在執(zhí)行命令。而xargs只會(huì)有一個(gè)進(jìn)程這樣減少系統(tǒng)資源開(kāi)銷。Exec對(duì)傳過(guò)來(lái)的命令長(zhǎng)度有限制xargs沒(méi)有。

[U3]xargs如何從find獲取結(jié)果》

Exec是通過(guò)command后的{}作為find的結(jié)果傳輸通道。而xargs若沒(méi)有指定就直接是作為stdin來(lái)傳。如果加上-i參數(shù)那么一樣是通過(guò){}來(lái)作為find的結(jié)果傳輸通道。


最后附上幾個(gè)可以參考的文章

http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html【這篇有點(diǎn)雜,內(nèi)容多】

http://oldboy.blog.51cto.com/2561410/792396 【find+sed的實(shí)例運(yùn)用很好很強(qiáng)大】

http://oldboy.blog.51cto.com/2561410/792396/


-----------------------------后續(xù)自我小結(jié)--------------------------

? ?find首先在文件查找上基本上我們希望找到的文件它都能夠幫我們找到的。另外就是-exec和xargs參數(shù)能夠讓我們對(duì)我們所找到的文件進(jìn)行相應(yīng)的操作。其實(shí)理解了-exec和xargs的格式含義也不算很難使用只要我們對(duì)我們的操作命令熟悉就可以了其實(shí)就只是一個(gè)代入的動(dòng)作而已。

? ?也正是因?yàn)槲覀兊?exec和xargs兩個(gè)參數(shù)后面能夠跟上我們系統(tǒng)的任何操作命令也就使得我們find命令能夠跟非常多的命令進(jìn)行結(jié)合只要是我們能想到的操作。并且文中最后也提到了find和sed命令的相結(jié)合。本身sed命令就地內(nèi)容的編輯上很靈活 選址、輸出、替換、改寫(xiě)等等。這樣兩個(gè)很強(qiáng)的命令一結(jié)合就變成了你可以對(duì)你系統(tǒng)中任何文件進(jìn)行任何操作、對(duì)文件內(nèi)容進(jìn)行任何操作。

Any operation of any files, make any edits to the contents of any

--------------------------------------------------------------------



轉(zhuǎn)載于:https://blog.51cto.com/atong/1343666

總結(jié)

以上是生活随笔為你收集整理的[一文一命令]find命令详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。