不搜索已安装共享的 find / grep 命令

不搜索已安装共享的 find / grep 命令

当我使用 find 命令时,我几乎总是需要搜索本地驱动器。但是,我几乎总是安装超大的网络共享,这些都包含在搜索中。有没有一种简单的方法可以排除 find 命令、grep 和其他类似命令中的那些?示例:

查找 / -name .vimrc

答案1

如果你使用 GNU find (在大多数 Linux 系统上使用),你将需要使用-mount

find / -mount -name .vimrc

OS X/MacOS 提供了local伪文件系统类型。GNU find 中没有这个选项(GNU find 识别的 fstypes)。

使用-fstype local在 MacOS 上查找的选项:

find / -fstype local -name .vimrc

如果您只想排除特定路径,您可以使用-prune

find / -path "/path/to/ignore" -prune -o -name .vimrc

更新:MacOS Catalina(2022 年 1 月)

我比最新的 MacOS 落后了两个主要版本,但是有些已经发生了变化。

首先,MacOS 现在支持该-mount选项。手册页find显示“与 -xdev 相同,用于 GNU 查找兼容性。”

第二,-fstype local似乎仍然有效。手册页指出它“匹配在执行 find 的系统上物理安装的任何文件系统”。

我测试了 中安装的两个驱动器/Volumes,一个是 USB 闪存驱动器(我认为算作物理安装),另一个是网络驱动器。我运行了find /Volumes <option> -name '*txt'。使用 运行-mount没有立即返回任何结果,因为当前文件系统上没有这样的文件。使用 运行很快在 USB 驱动器上-fstype local找到了一个.txt文件,然后似乎遍历了已安装的整个驱动器而没有返回任何文件(即使确实存在一些文件)。

答案2

man find显示:

-xdev 不要将目录下降到其他文件系统上。

答案3

最初的问题是仅在本地磁盘上查找,因此为了完整性,以下是我所使用的;

for PART in `awk '(!/^#/ && $6 != "0" || $3 == "xfs" ) { print $2 }' /etc/fstab 2>/dev/null`; do find $PART -xdev -name .vimrc -print 2>/dev/null; done

只要您的 fstab 设置正确,它就应该只搜索本地磁盘;即,cifs 挂载应该将最终标志设置为 0。当我们开始使用 RHEL7 时,我为 xfs 文件系统包含了 OR,它们也应该设置为 0,因为它们不打算在多次重启后进行磁盘重组。

希望有所帮助。

相关内容