最近因?yàn)榉?wù)器運(yùn)維的需要在學(xué)習(xí)linux腳本編程弄跌,接觸到find命令宛乃,看了一些課程和文章厢破,但是總感覺(jué)還是沒(méi)有講明白prune缝裁。
簡(jiǎn)單來(lái)說(shuō)扫皱,prune的功能就是當(dāng)遇到某個(gè)文件夾的時(shí)候,跳過(guò)這個(gè)文件夾捷绑,不進(jìn)去繼續(xù)查找韩脑。我們下面看例子說(shuō)。
? findExample tree .
.
├── folder1
├── folder2
│ ├── sub1
│ │ └── file1
│ └── sub2
│ └── file2
└── folder3
└── file3
5 directories, 3 files
這是用來(lái)做說(shuō)明的文件夾結(jié)構(gòu)粹污。如果我們想查找除了folder3這個(gè)文件夾之外的其他文件夾里的文件段多,可以用這樣的命令實(shí)現(xiàn):
? findExample find . -path ./folder3 -prune -o -type f -print
./folder2/sub1/file1
./folder2/sub2/file2
find后面的第一個(gè)英文點(diǎn)號(hào).
表示當(dāng)前根路徑,-path ./folder3
表示匹配路徑為./folder3
的文件夾壮吩,-prune
表示把前面命令所匹配到的路徑排除进苍,不再進(jìn)入該路徑下面繼續(xù)查找,-o
表示或鸭叙,-type f
表示查找文件觉啊,-print
表示打印查找結(jié)果到命令行終端。
有幾個(gè)需要注意的點(diǎn):
-
-path
后面需要跟絕對(duì)路徑或者是相對(duì)路徑沈贝,不能只有文件夾名稱(chēng)
? findExample find . -path folder3 -prune -o -type f -print
./folder2/sub1/file1
./folder2/sub2/file2
./folder3/file3
這樣是錯(cuò)誤的柄延。把-path
改成-name
就對(duì)了。
? findExample find . -name folder3 -prune -o -type f -print
./folder2/sub1/file1
./folder2/sub2/file2
-
-o
一開(kāi)始讓我感到很疑惑缀程。它的意思是OR
,那就是既匹配了前面的./folder3
市俊,又匹配了后面的-type f
杨凑,可為什么打印出來(lái)的沒(méi)有./folder3
呢?原來(lái)是因?yàn)?code>-print只對(duì)離自己最近的一個(gè)匹配條件起作用摆昧,在這個(gè)例子里也就是只打印-o
后面的匹配條件所匹配的文件撩满,對(duì)-o
前面的-path folder3 -prune
所匹配的東西不起作用
find
命令是linux系統(tǒng)里很常用的一個(gè)命令,可以通過(guò)man find
命令查看其他參數(shù)和用法绅你。有疑問(wèn)伺帘,可以一起探討。