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

suf*_*ffa 104 unix bash

我查看了其他类似的问题,但没有找到一个可以让我掌握这个概念,并根据我有限的时间使其适用于我的情况.我只是运行find命令来查找某些文件,但是子目录中的某些文件具有我想忽略的相同名称.谢谢你的帮助.以下是我正在使用的命令:

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

命令:

find /dev/ -name 'abc-*'
Run Code Online (Sandbox Code Playgroud)

回复了什么:

/dev/abc-scanner
/dev/abc-cash
...
...
...
/dev/.udev/names/abc-scanner
/dev/.udev/names/abc-cash
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*air 166

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

 find /dev -maxdepth 1 -name 'abc-*'
Run Code Online (Sandbox Code Playgroud)

...或者如果你特别想要排除.udev目录,你可以这样做:

 find /dev -name '.udev' -prune -o -name 'abc-*' -print
Run Code Online (Sandbox Code Playgroud)

  • 最好使用 `xargs` 来代替,比如: `find /dev -maxdepth 1 -name 'abc-*' | xargs ls -l` 但如果它们的名称中可能有空格,您应该执行 `find /dev -maxdepth 1 -name 'abc-*' -print0 | xargs ls -l` xargs -0 ls -l` (2认同)
  • 或者,如果您只需要第一级的子目录,`ls -l /dev/abc-* /dev/*/abc-* | fgrep -v /dev/.udev` ...除非至少在我的 Linux 上 `/dev/*/*` 不包含 `/dev/.udev/*` 中的文件,所以你可以省略 `fgrep -v` 。 (2认同)

Ste*_*ton 9

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

ls /dev/abc-*
Run Code Online (Sandbox Code Playgroud)

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

  • 应该指出的是,通配符是这里的重要部分,而不是"ls".您可以使用`echo`或`wc`找到相同的文件或者您有什么,因为shell会为您扩展通配符.所以`for file in/dev/abc-*; 对每个"$ file"做一些事情; 完成`可能是OP实际上正在寻找的东西. (5认同)
  • 当目录中有太多文件时,ls 效果不佳。 (2认同)

Chr*_*s J 5

这可能会做你想做的:

find /dev \( ! -name /dev -prune \) -type f -print
Run Code Online (Sandbox Code Playgroud)

  • 是的,这有效。-maxdepth 在某些较旧的 Unix 上未在 find 中实现。 (2认同)