排除在find命令完整的目錄路徑列表,我有一個非常具體的需要找到無主文件和目錄在Solaris上使用一個腳本,需要能夠從查找排除完整的目錄路徑,因爲他們包含潛在的數千個無主文件(這是正常的,因爲它們是託管在其他服務器上的文件)。我甚至不希望找到這些目錄中進行搜索,因爲它會掛在服務器(CPU扣球99%長一段時間),因此管道的查找結果中的egrep過濾掉這些目錄是不是一種選擇。如何在Solaris
我知道我能做到這一點的名字排除多個目錄中的一個:
find/-mount -local \(-type d -a \(-name dir1 -o -name dir2 -o dir3 \) \) -prune -o \(-nouser -o -nogroup \) -print
然而,這將匹配DIR1和DIR2在任何目錄的目錄結構,這是不任何地方我想要什麼。
我希望能夠防止查找在以下目錄中甚至搜索(爲例):
/opt/dir1
/opt/dir2
/var/dir3/dir4
我仍然希望它發現在以下目錄無主文件和目錄:
/opt/somedir/dir1
/var/dir2
/home/user1/dir1
我已經嘗試在名稱參數中使用正則表達式,但自從找到匹配的名稱對其所發現的基名稱,我無法指定路徑。不幸的是,Solaris的find不支持GNU查找選項,如-wholename或-path,所以我有點搞砸了。
我的目標是將有以下語法的腳本:
script.sh "/path/to/dir1,/path/to/dir2,/path/to/dir3"
我怎麼能這樣做使用查找和Solaris上標準的SH腳本(/ bin/sh的)(5.8及以上) ?
開始'find'從 '/' 是有問題的。腳本中的預處理步驟,它只抓取頂層路徑元素,即。/opt,/ var,然後在排除不感興趣的目錄之後,爲這些目錄運行查找?只是一個想法,祝你好運!如果您想出自己的解決方案,請發帖,因爲這是一個有趣的問題。如果您在http://unix.stackexchange.com/上發帖,您可能會更多地注意到這一點。 – shellter
從/開始實際是必需的。該腳本的目的是生成審計合規結果,其中列出了我們爲客戶支持的服務器中的所有無主文件和目錄,但不知道它們的位置。我們確實知道有一些我們從不想掃描的目錄(/ proc,/ dev,remote mounts等等),但我們總是需要掃描一切。我們對使用包含列表進行了很多考慮,而不是排除列表,並且我們別無選擇,只能使用排除選項,因爲它是覆蓋最多未知案例的一個(仍然在跟蹤我?)。 –
只是重複上unix.stackexchange.com出任建議:_http://unix.stackexchange.com/questions/23077/how-to-exclude-a-list-of-full-directory-paths-in-find-命令上solaris_發佈 –