在查找中仅包含真实文件系统的更好方法?

在查找中仅包含真实文件系统的更好方法?

这是可行的,并且在具有不同安装点的系统(至少 Ubuntu 18.04 和 RHEL 8.3)之间是通用的,但是有更好的方法吗?

(忽略我正在尝试查找pg_ctl并排除“权限被拒绝”。 find这就是我要问的问题。)

$ realfs=$(df -x tmpfs -x devtmpfs | tail -n +2 | awk '{print $6;}' | xargs)
$ echo $realfs
/ /boot/efi /Database/12 /Database/12/backups
$ find ${realfs} -xdev -type f -name pg_ctl |& grep -v "Permission denied"  
/usr/bin/pg_ctl
/usr/lib64/pgsql/postgresql-10/bin/pg_ctl

我开发这种方法不仅是因为该方法需要在具有不同安装点的系统之间通用,而且还因为-prune它令人困惑。

答案1

在 Linux 上,支持的文件系统列于/proc/filesystems;那些不是物理本地文件系统标有nodev.因此

fs=($(grep -v '^nodev' /proc/filesystems))

给出您感兴趣的类型的数组,然后可以将find其与 s一起使用-fstype

findfs=($(echo ${fs[*]/#/ -o -fstype }))
find / \( -false ${findfs[*]} \)

这避免了对一组文件系统进行硬编码排除提前时间。它确实有一些缺点,特别是它排除了网络文件系统,这在某些情况下可能会成为问题。

相关内容