六月丁香五月婷婷,丁香五月婷婷网,欧美激情网站,日本护士xxxx,禁止18岁天天操夜夜操,18岁禁止1000免费,国产福利无码一区色费

學(xué)習(xí)啦>學(xué)習(xí)電腦>操作系統(tǒng)>Linux教程>

Linux命令之find介紹

時(shí)間: 恒輝636 分享

  (一)options

  -d,-depth:二者作用相同,man手冊(cè)和很多博客上都說(shuō)它們的作用是:首先查找當(dāng)前目錄文件,然后再在其子目錄查找。不過(guò)我自己實(shí)驗(yàn)了很多次,發(fā)現(xiàn)沒(méi)什么效果。。。煩請(qǐng)高人指點(diǎn)~

  -maxdepth:指定最大目錄深度,也就是指定目錄的幾級(jí)子目錄:1代表只是指定目錄本身;2表示一級(jí)子目錄;3代表“孫目錄”,以此類(lèi)推。。。

  m@meng:~/patches/tmp$ find . -maxdepth 1 -name 'onlyme*'

  ./onlyme

  ./onlyme1

  m@meng:~/patches/tmp$ find . -maxdepth 2 -name 'onlyme*'

  find . -maxdepth 2 -name 'onlyme*'

  ./test/onlyme5

  ./test/onlyme.sh

  ./onlyme

  ./onlyme1

  -mindepth:類(lèi)似上面的-maxdepth,但是指定的是最小深度。比如指

  定 2,那就是只搜索深度大于2的各級(jí)子目錄,而不理會(huì)小于2的那些目錄(小于2的就是指定目錄本身),如下例: m@meng:~/patches/tmp$ find . -mindepth 1 -name 'onlyme*'

  ./test/onlyme5

  ./test/onlyme.sh

  ./onlyme

  ./onlyme1

  m@meng:~/patches/tmp$ find . -mindepth 2 -name 'onlyme*'

  ./test/onlyme5

  ./test/onlyme.sh

  -help:顯示幫助信息,并退出。 -mount或-xdev:如果某個(gè)(子)目錄是另一個(gè)文件系統(tǒng)的掛載點(diǎn),則跳過(guò)該目錄。

  -daystart:先看man手冊(cè)的說(shuō)法:Measure times (for -amin, -atime, -cmin, -ctime, -mmin, and -mtime) from the beginning of today rather than from24 hours ago. 看來(lái)這個(gè)選項(xiàng)只影響那些跟時(shí)間有關(guān)的test,而且改變了時(shí)間的計(jì)算方式,即不再?gòu)漠?dāng)前時(shí)刻開(kāi)始計(jì)算,而是從每天的0:00開(kāi)始計(jì)算。前面說(shuō)過(guò),-atime n,這個(gè)n并不代表實(shí)際的“一天”,而是指24小時(shí);但是加上-daystart這個(gè)選項(xiàng)之后,就可以真的代表“一天”了,因?yàn)檫@時(shí)就是從每天的0:00開(kāi)始計(jì)時(shí)的,看下面的例子:

  m@meng:~/patches/tmp$ date

  2015年 07月 12日 星期日 00:13:47 CST

  m@meng:~/patches/tmp$ stat new

  最近訪問(wèn):2015-07-12 00:10:15.707908310 +0800

  最近更改:2015-07-12 00:10:15.707908310 +0800

  最近改動(dòng):2015-07-12 00:10:15.707908310 +0800

  m@meng:~/patches/tmp$ stat test

  最近訪問(wèn):2015-07-11 23:42:25.064527595 +0800

  最近更改:2015-07-06 23:57:45.095385673 +0800

  最近改動(dòng):2015-07-06 23:57:45.095385673 +0800

  m@meng:~/patches/tmp$ find -atime 0

  .

  ./test

  ./new

  m@meng:~/patches/tmp$ find -daystart -atime 0

  .

  ./new

  這就很顯然了,在沒(méi)有加上-daystart這個(gè)選項(xiàng)之前,-atime 0指的是從當(dāng)前這一刻開(kāi)始,往前的24小時(shí)之內(nèi),如果某個(gè)文件被訪問(wèn)過(guò),則匹配;但是加上-daystart之后,-atime 0表示今天被訪問(wèn)過(guò)的文件才會(huì)匹配。同理-atime 1表示昨天(即7/11 0:00 ~ 7/11 23:59)被訪問(wèn)過(guò)的文件才會(huì)匹配。

  這個(gè)選項(xiàng)的作用可以簡(jiǎn)單歸納為:化零為整。

  (二)actions

  -delete:找到匹配的文件之后,將其刪除。man手冊(cè)上提到:Use of -delete automatically turns on the -depth option,不過(guò)我還沒(méi)搞懂這個(gè)-depth到底有什么卵用。。 -print:這個(gè)是默認(rèn)的action,即沒(méi)有指定任何action的時(shí)候其實(shí)就是使用了這個(gè)-print,但是指定了另一個(gè)action的時(shí)候,就必須顯式加上-print才有效果。它把每個(gè)匹配的文件打印到標(biāo)準(zhǔn)輸出上,每行一個(gè)文件。這意味著,-print在打印的時(shí)候,每個(gè)文件末尾添加了一個(gè)換行符。

  但是這個(gè)換行符是為了瀏覽方便,有時(shí)會(huì)造成一些麻煩,比如使用管道的時(shí)候;如果想省略這個(gè)換行符,可以用-print0來(lái)代替,如下: m@meng:~/patches/tmp$ find -daystart -atime 0 -print

  .

  ./new

  m@meng:~/patches/tmp$ find -daystart -atime 0 -print0

  ../newm@meng:~/patches/tmp$

  所以,如果只是想在終端觀察輸出,沒(méi)有必要使用-print0,-print就足夠了。

  -print還有一個(gè)變種是-printf,類(lèi)似于C語(yǔ)言中的printf函數(shù),進(jìn)行格式化輸出,暫時(shí)不研究了,有太多格式。

  -ls:類(lèi)似于ls命令的-dils選項(xiàng)組合,如下: m@meng:~/patches/tmp$ find -daystart -atime 0 -ls

  7478778 4 drwxrwxr-x 3 m m 4096 7月 12 00:10 .

  7478967 0 -rw-rw-r-- 1 m m 0 7月 12 00:10 ./new

  m@meng:~/patches/tmp$ ls -dils new

  7478967 0 -rw-rw-r-- 1 m m 0 7月 12 00:10 new

  換了一種更詳細(xì)的輸出而已。

  f系列,即-(fls/fprint/fprint0/fprintf) file,這幾個(gè)action與沒(méi)有開(kāi)頭f的那幾個(gè)action是非常相似的,只是不再把結(jié)果打印到標(biāo)準(zhǔn)輸出,而是輸出到文件file中。

  -exec command ;與-exec command {} +

  -exec本身其實(shí)只是在find執(zhí)行完之后執(zhí)行另一條命令,我之前以為-exec類(lèi)似于管道,find找到的文件會(huì)直接被command處理,結(jié)果不是這樣;若想要達(dá)到管道的效果,需要在 command后面添加“{}”,它代表前面找到的文件。

  然后是語(yǔ)法問(wèn)題:command后面沒(méi)有“{}”時(shí),必須要以一格空格和一個(gè)分號(hào)結(jié)尾;command后面有“{}”時(shí),可以使用前面那種結(jié)尾方式,也可以使用一個(gè)空格和一個(gè)“+”結(jié)尾;

  為了防止shell本身的擴(kuò)展,分號(hào)需要轉(zhuǎn)義,要么前面添加反斜線,要么用引號(hào)括起來(lái);同理“{}”最好也用引號(hào)保護(hù)起來(lái)。

  m@meng:~/patches/tmp$ find . -name new -print -exec cat onlyme1 \;

  ./new

  haha

  m@meng:~/patches/tmp$ find . -name new -print -exec cat onlyme1 +

  find: 缺少“-exec”參數(shù)

  m@meng:~/patches/tmp$ find . -name new -print -exec cat {} \;

  ./new

  hello

  m@meng:~/patches/tmp$ find . -name new -print -exec cat {} +

  ./new

  hello

  m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ';'

  ./new

  hello

  m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ";"

  ./new

  hello

  第一個(gè)例子說(shuō)明command和find之間可以是完全獨(dú)立的;第二個(gè)說(shuō)明command后面沒(méi)有“{}”時(shí)只能以分號(hào)結(jié)尾;后面幾個(gè)例子說(shuō)明了有“{}”時(shí)的結(jié)尾情況。

  -execdir command ;和-execdir command {} +

  與上一對(duì)選項(xiàng)類(lèi)似,只是-exec后面的command是在當(dāng)前目錄執(zhí)行的;而-execdir是在匹配文件所在子目錄中執(zhí)行的。我們使用pwd命令測(cè)試一下:m@meng:~/patches/tmp$ ls

  magic.mgc new onlyme onlyme1 test

  m@meng:~/patches/tmp$ ls test/

  onlyme5 onlyme.sh

  m@meng:~/patches/tmp$ find . -name onlyme.sh -exec pwd \;

  /home/m/patches/tmp

  m@meng:~/patches/tmp$ find . -name onlyme.sh -execdir pwd \;

  /home/m/patches/tmp/test

  文件onlyme.sh在子目錄test中,find在找到它之后執(zhí)行pwd命令;但是-exec和-execdir的結(jié)果是不同的。

  -ok與-okdir

  與-exec和-execdir是基本相同的,只是在執(zhí)行之前會(huì)先詢(xún)問(wèn)一下用戶。 -prune

  if the file is a directory, do not descend into it. 就是說(shuō),如果某個(gè)目錄匹配了,那么就不再進(jìn)入這個(gè)目錄進(jìn)行搜索。m@meng:~/patches/tmp$ find . -name 'test*'

  ./test

  ./test/test1

  m@meng:~/patches/tmp$ find . -name 'test*' -prune

  ./test

  我們看到,匹配 -name ‘test*’的包括test子目錄本身以及test目錄下的test1文件;但是加上-prune選項(xiàng)之后,就不在進(jìn)入到test目錄中進(jìn)行搜索了,因?yàn)閠est目錄本身也是一

  個(gè)匹配項(xiàng)。-prune經(jīng)常配合-path用來(lái)排除某些子目錄。

  -quit

  立即退出,-quit之后的命令將不再執(zhí)行。如下:m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ";"

  ./new

  hello

  m@meng:~/patches/tmp$ find . -name new -print -quit -exec cat {} ";"

  ./new

  m@meng:~/patches/tmp$ find . -name new -print -exec cat {} ";" -quit

  ./new

  hello

  m@meng:~/patches/tmp$ find . -name new -quit -print -exec cat {} ";"

  m@meng:~/patches/tmp$

  (三)邏輯運(yùn)算

  先扔一段man手冊(cè)的信息:

  The expression is made up of options (which affect overall operation rather than the processing of a specific file, and always return true),tests

  (which return a true or false value), and actions (which have side effects and return a true or false value), all separated by operators.

  -and is assumed where the operator is omitted.

  If the expression contains no actions other than -prune, -print is performed on all files for which the expression is true.

  這就是說(shuō),expression的三個(gè)組成部分其實(shí)都是布爾表達(dá)式,而表達(dá)式都是有值的,不是true就是false。手冊(cè)說(shuō),options的值永遠(yuǎn)是true;而其他兩者的值可true可false。

  這樣,就會(huì)有邏輯運(yùn)算,其實(shí)主要是test之間的運(yùn)算,因?yàn)橐粋€(gè)expression里面可以有多個(gè)test,這些test之間可以進(jìn)行與、或、非運(yùn)算。

  比如上篇文章中的例子:

  m@meng:~/patches$ find . -path ./tmp -o -name onlyme

  ./tmp

  ./tmp/onlyme

  至此,find命令的基本用法完畢~好累。上面的總結(jié)肯定有不完善的地方,我會(huì)再以后慢慢補(bǔ)充慢慢糾正的。

Linux命令之find介紹

(一)options -d,-depth:二者作用相同,man手冊(cè)和很多博客上都說(shuō)它們的作用是:首先查找當(dāng)前目錄文件,然后再在其子目錄查找。不過(guò)我自己實(shí)驗(yàn)了很多次,發(fā)現(xiàn)沒(méi)什么效果。。。煩請(qǐng)高人指點(diǎn)~ -maxdepth:指定最大目錄深度,也就是指定目
推薦度:
點(diǎn)擊下載文檔文檔為doc格式
168473