如何仅在给定目录中查找文件,并使用bash忽略子目录


129

我查看了其他类似的问题,但是没有找到能够使我理解这一概念并将其应用于基于我的有限时间的情况的问题。我只是运行find命令来查找某些文件,但是子目录中的某些文件具有我要忽略的相同名称。谢谢你的帮助。以下是我正在使用的命令:

我感兴趣的文件/模式:/ dev / abc-scanner,/ dev / abc-cash...。

命令:

find /dev/ -name 'abc-*'

返回什么:

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

我想忽略后面的文件:/dev/.udev / ...


9
忽略特定的子目录,还是不属于任何子目录?对于后者,请使用-maxdepth 1选项
frankc 2011年

@frankc发布它作为答案。
cnicutar 2011年

Answers:


202

如果您只想将查找限制在第一级,则可以执行以下操作:

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

...或者如果您特别想排除.udev目录,则可以执行以下操作:

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

如果我想列出上述模式中找到的所有上述符号链接指向的位置,我是否仅使用管道?类似于find / dev -maxdepth 1 -name'abc- *'| ls -l
suffa 2011年

1
最好xargs改用这样的方法,例如:find /dev -maxdepth 1 -name 'abc-*' | xargs ls -l但是,如果它们的名称中有空格,则应该这样做find /dev -maxdepth 1 -name 'abc-*' -print0 | xargs -0 ls -l
Mark Longair 2011年

但是,正如史蒂芬·达林顿Stephen Darlington)的回答所指出的那样,我不确定您为什么不这样做ls -l /dev/abc-*
马克·隆艾尔

另外,如果您想找出符号链接指向的位置,可以这样做for x in /dev/abc-*; do readlink -f $x; done
Mark Longair 2011年

1
或者,如果只希望第一级的子目录,则ls -l /dev/abc-* /dev/*/abc-* | fgrep -v /dev/.udev... ...至少在我的Linux /dev/*/*上不包括文件,/dev/.udev/*因此可以省略fgrep -v
2011年

9

您需要使用find什么特殊原因吗?您仅可以ls用来查找与目录中的模式匹配的文件。

ls /dev/abc-*

如果确实需要使用find,则可以使用-maxdepth 1开关仅应用于指定的目录。


我认为您的意思-maxdepth 1不是-maxdepth 0
Mark Longair 2011年

5
应该指出的是,通配符不是这里的重要部分ls。您可以找到与echowc或拥有的文件相同的文件,因为外壳程序会为您扩展通配符。因此for file in /dev/abc-*; do something with each "$file"; done,OP可能真正在寻找什么。
2011年

1
啊,我永远都记不清是哪条路了……谢谢您的编辑。另外,值得注意的是它不是通用的。例如,Solaris版本的find没有它。
斯蒂芬·达灵顿

@tripleee +1。对。如果可能的话,最好在外壳中完成所有操作。
斯蒂芬·达林顿

1
@MustafaOzturk这ls是多余的。for f in abc*; ...是你所需要的全部。
斯蒂芬·达灵顿

4

这可能会做您想要的:

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

2
是的,这可行。-maxdepth在某些较旧的Unix上未在find中实现。
CCTO

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

对我不起作用。它什么也没返回。如果我只是做“。” 它为我提供了我正在处理的目录下目录中的所有文件。

find /dev -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls

用“。”不返回任何内容 相反,我会获得目录中所有“大”文件以及存储旧文件的rootfiles /目录的列表。

继续。这可行。

find ./ -maxdepth 1 -name "*.root" -type 'f' -size +100k -ls
564751   71 -rw-r--r--   1 snyder   bfactory   115739 May 21 12:39 ./R24eTightPiPi771052-55.root
565197  105 -rw-r--r--   1 snyder   bfactory   150719 May 21 14:27 ./R24eTightPiPi771106-2.root
565023   94 -rw-r--r--   1 snyder   bfactory   134180 May 21 12:59 ./R24eTightPiPi77999-109.root
719678   82 -rw-r--r--   1 snyder   bfactory   121149 May 21 12:42 ./R24eTightPiPi771098-10.root
564029  140 -rw-r--r--   1 snyder   bfactory   170181 May 21 14:14 ./combo77v.root

显然/dev 是指感兴趣的目录。但是./需要的,不仅仅是./即使我弄清楚了什么/dev意思或多或少之后,对它们的需求也不明显。

我无法发表评论,因为我没有“声誉”。


1
您可以通过给出良好的答案来赢得声誉。请阅读此stackoverflow.com/conduct
aifrim

有一些原因不允许您发表评论,这也不允许您在“答案”部分中发表评论。请删除。
罗伯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.