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

一つの方法はただ含む物理ファイルシステム

物理ファイルシステムのすべてのマウントポイントを識別し、1行に入力します。

$ 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で動作します。)

関連情報