当我使用 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,因为它们不打算在多次重启后进行磁盘重组。
希望有所帮助。