POSIX 查找所有本地文件

atk*_*atk 6 find posix

我正在尝试编写一个跨平台的命令行,它将在文件系统上找到所有本地文件。

我的意图是使用该find命令,仅使用 POSIX 参数。有没有办法跳过远程文件系统上的文件,同时仅限于 POSIX 命令,而无需编程?

我当前的命令行是

find -type f -print
Run Code Online (Sandbox Code Playgroud)

但这显然列出了每个常规文件,而不仅仅是本地文件。

我知道这个-local标志,但据我所知,它不是 POSIX 或跨平台标准的其他部分。 locate似乎也不是跨平台的。我也不认为该-xdev标志是我正在寻找的,因为我想搜索所有本地安装的文件系统 - 如果//home都是本地的,并且我运行find / -xdev -printfind应该跳过/home(除非我误解了东西)。

就其价值而言,以下 URL 是有用的资源...

ric*_*ici 2

我不认为有任何方法可以仅使用 POSIX 接口来确定文件系统是远程的还是本地的。POSIX 甚至不强制执行mount命令,据我所知,所有对文件系统的引用都充满了“实现定义”一词。

该命令-local的主要内容find没有太大帮助,因为它仅在 Solaris 上可用,并且它取决于列出远程文件系统类型的配置文件是否存在。

POSIXdf确实强制执行命令,并且如果该命令与-P;在该格式中,有六个空格分隔的字段,其中第一个是“文件系统的名称,采用实现定义的格式”,最后一个是挂载点。

您需要的是与本地文件系统对应的所有安装点的列表。在这里,我认为你将不得不退回到启发式;这是排除“看起来像”远程文件系统的文件系统名称。一些例子:

//...     CIFS (Samba)
host:...  NFS
/afs      AFS
Run Code Online (Sandbox Code Playgroud)

这并不是一份详尽的清单,而且完全没有任何保证。

如果您随后从输出中过滤掉这些行df,然后删除前五列,则可以将列表提供给find具有-xdev主列表的命令。

即使这听起来似乎有道理,但实际上并不能保证文件系统实际上已“挂载”(请参阅​​ AFS)或文件系统完全是本地的或完全远程的(基于熔断器的文件系统可以任意重定向单个文件)。因此,我的建议是谨慎行事。