我想执行一个脚本来挑选一个随机目录路径:
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 上适用于我。)