如何使用 find 命令从搜索中排除文件夹 proc 和 sys?

如何使用 find 命令从搜索中排除文件夹 proc 和 sys?

我想执行一个脚本来挑选一个随机目录路径:

find / -type d | shuf -n1 

不幸的是,我收到有关禁止进入某些目录的错误消息。

如何使用 find 从搜索中排除目录?

答案1

要排除特定路径,在 Linux 上:

find / -path /sys -prune -o -path /proc -prune -o -type d

另一种方法是告诉find不要在不同的文件系统下递归。

find / -xdev -type d

你也可以使用定位查询文件名数据库(通常每晚更新,您也可以使用 手动更新updatedb)而不是实时系统。

locate '*' | shuf -n 1

答案2

使用 GNU find 您还可以使用正则表达式选项,例如:

find / -regextype posix-extended -regex "/(sys|srv|proc)" -prune -o -type d

答案3

一种方法是仅包括真正的文件系统。

确定真实文件系统的所有挂载点,并将它们放在一行上:

$ realfs=$(df -x tmpfs -x devtmpfs | tail -n +2 | awk '{print $6;}' | xargs)
$ echo $realfs
/ /home /dos /Data 

find仅针对这些安装点运行。

$ find ${realfs} -type d |& grep -v "Permission denied" | shuf -n1
/Data/share/source/pan2/.git/refs/tags

|&是 4.x 中添加的 bashism——在 4.4 上适用于我。)

相关内容