最近因為服務器運維的需要在學習linux腳本編程,接觸到find命令,看了一些課程和文章,但是總感覺還是沒有講明白prune。
簡單來說,prune的功能就是當遇到某個文件夾的時候,跳過這個文件夾,不進去繼續(xù)查找。我們下面看例子說。
? findExample tree .
.
├── folder1
├── folder2
│ ├── sub1
│ │ └── file1
│ └── sub2
│ └── file2
└── folder3
└── file3
5 directories, 3 files
這是用來做說明的文件夾結(jié)構。如果我們想查找除了folder3這個文件夾之外的其他文件夾里的文件,可以用這樣的命令實現(xiàn):
? findExample find . -path ./folder3 -prune -o -type f -print
./folder2/sub1/file1
./folder2/sub2/file2
find后面的第一個英文點號.表示當前根路徑,-path ./folder3表示匹配路徑為./folder3的文件夾,-prune表示把前面命令所匹配到的路徑排除,不再進入該路徑下面繼續(xù)查找,-o表示或,-type f表示查找文件,-print表示打印查找結(jié)果到命令行終端。
有幾個需要注意的點:
-
-path后面需要跟絕對路徑或者是相對路徑,不能只有文件夾名稱
? findExample find . -path folder3 -prune -o -type f -print
./folder2/sub1/file1
./folder2/sub2/file2
./folder3/file3
這樣是錯誤的。把-path改成-name就對了。
? findExample find . -name folder3 -prune -o -type f -print
./folder2/sub1/file1
./folder2/sub2/file2
-
-o一開始讓我感到很疑惑。它的意思是OR,那就是既匹配了前面的./folder3,又匹配了后面的-type f,可為什么打印出來的沒有./folder3呢?原來是因為-print只對離自己最近的一個匹配條件起作用,在這個例子里也就是只打印-o后面的匹配條件所匹配的文件,對-o前面的-path folder3 -prune所匹配的東西不起作用
find命令是linux系統(tǒng)里很常用的一個命令,可以通過man find命令查看其他參數(shù)和用法。有疑問,可以一起探討。