如何只在给定的目录中查找文件,而忽略子目录使用 bash

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

225436 次浏览

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

ls /dev/abc-*

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

如果只想将查找限制在第一级,可以这样做:

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

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

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

这可能会达到你想要的效果:

find /dev \( ! -name /dev -prune \) -type f -print
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或多或少意味着什么之后。

我不能作为评论回应,因为我没有“名声”。

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

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

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

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

还有一种替代方法叫做生皮(rh) ,它更容易使用,而不是:

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

你可以这样做:

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

R 与“-M1-M1”相同,后者与 find 的“-mindeep 1-maxdeep 1”相同,只是短了很多。

生皮(rh)可从 https://raf.org/rawhidehttps://github.com/raforg/rawhide。它至少可以在 Linux、 FreeBSD、 OpenBSD、 NetBSD、 Solaris、 macOS 和 Cygwin 上工作。

免责声明: 我是目前生皮的作者