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

toe95027  于 2022-09-21  发布在  Unix
关注(0)|答案(6)|浏览(223)

我正在运行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/...

qnakjoqk

qnakjoqk1#

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

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

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

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

xe55xuns2#

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

ls /dev/abc-*

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

nxowjjhe

nxowjjhe3#

这可能会执行您想要的操作:

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

0tdrvxhp4#

我在这里遇到了一个更普遍的问题--我想在匹配模式的目录中查找文件,而不是在它们的子目录中。

我的解决方案(假设我们正在寻找直接位于arch目录中的所有cpp文件):

find . -path "*/arch/*/*" -prune -o -path "*/arch/*.cpp" -print

我不能使用最大深度,因为它首先限制了搜索,并且不知道我想要排除的子目录的名称。

lrl1mhuk

lrl1mhuk5#

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的含义之后,对/的需求也并不明显。

我不能回应评论,因为我没有‘声誉’。

dddzy1tm

dddzy1tm6#

还有一种叫做生皮(Rh)的替代品,使用起来要容易得多。不是:

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

您可以执行以下操作:

rh -r /dev '"abc-*"'

R与“-m1-m1”相同,后者与Find的“-minthepth 1-max thepth 1”相同,只是要短得多。

生皮(Rh)可从https://raf.org/rawhidehttps://github.com/raforg/rawhide获得。它至少可以在Linux、FreeBSD、OpenBSD、NetBSD、Solaris、MacOS和Cygwin上运行。

免责声明:我是《生皮》的现任作者

相关问题