2011-10-10 68 views
61

我查看了其他類似的問題,但沒有找到一個能夠使我掌握概念並使其適用於基於我的限制的情況時間。我只是運行find命令來查找某些文件,但子目錄中的某些文件具有我想忽略的相同名稱。謝謝你的幫助。下面是我使用的命令:如何僅查找給定目錄中的文件,並忽略使用bash的子目錄

的文件/模式我很感興趣: 的/ dev/ABC-掃描儀的/ dev/ABC現金....

命令:

find /dev/ -name 'abc-*' 

什麼東西被退回:

/dev/abc-scanner 
/dev/abc-cash 
... 
... 
... 
/dev/.udev/names/abc-scanner 
/dev/.udev/names/abc-cash 

我想忽略後者的文件:/dev/.udev/...

+7

忽略特定的子目錄,或者沒有陷入任何subdire ctories?對於後者,請使用-maxdepth 1選項 – frankc

+0

@frankc將其作爲答案。 – cnicutar

+0

[可以從查找中排除目錄。命令](http://stackoverflow.com/questions/4210042/exclude-directory-from-find-command) – BroSlow

回答

95

如果你只是想查找限制爲第一級,你可以這樣做:

find /dev -maxdepth 1 -name 'abc-*' 

...或者,如果你特別想排除.udev目錄,你可以這樣做:

find /dev -name '.udev' -prune -o -name 'abc-*' -print 
+0

如果我想列出在上述模式中找到的所有上述符號鏈接的位置,我會只使用管道嗎?就像find/dev -maxdepth 1 -name'abc- *'| ls -l – suffa

+1

最好使用'xargs'來替代,比如:'find/dev -maxdepth 1 -name'abc- *'| xargs ls -l',但是如果有可能他們在名稱中會有空白,你應該這樣做'find/dev -maxdepth 1 -name'abc- *'-print0 | xargs -0 ls -l' –

+0

但是,正如[斯蒂芬達林頓的答案指出](http://stackoverflow.com/questions/7715485/how-to-only-find-files-in-a-given-directory-and -ignore-subdirectories-using-bash/7715550#7715550),我不確定爲什麼你不會只執行'ls -l/dev/abc- *' –

7

是否有任何特殊原因需要使用find?您可以使用ls來查找與目錄中的模式相匹配的文件。

ls /dev/abc-* 

如果確實需要使用find,您可以使用-maxdepth 1開關只適用於指定的目錄。

+0

我想你的意思是'-maxdepth 1'而不是'-maxdepth 0' –

+4

應該指出的是,通配符是這裏的重要部分,而不是'ls'。你可以用'echo'或'wc'或者你找到相同的文件,因爲shell爲你擴展了通配符。因此'在/ dev/abc- *文件;對每個「$ file」做一些事情;完成「可能是OP實際所尋找的。 – tripleee

+1

啊,我永遠不會記得它是哪一輪...感謝編輯。另外,值得注意的是它不是通用的。例如,Solaris版本的「find」沒有它。 –

2

這可能會做你想要什麼:

find /dev \(! -name /dev -prune \) -type f -print 
+0

是的,這有效。 -maxdepth沒有在一些較老的Unix上找到。 – CCTO