findコマンドを使用して、フォルダーprocおよびsysを検索から除外するにはどうすればよいですか?


10

ランダムなディレクトリパスを選択するスクリプトを実行したいと思いました。

find / -type d | shuf -n1 

残念ながら、特定のディレクトリに入ることの禁止に関するエラーメッセージが表示されます。

findでディレクトリを検索から除外するにはどうすればよいですか?

回答:


13

Linuxで特定のパスを除外するには:

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

別のアプローチは、find異なるファイルシステムで再帰しないように指示することです。

find / -xdev -type d

ライブシステムの代わりに、locateを使用しファイル名のデータベースをクエリすることもできます(通常は毎晩更新され、手動で更新することもできますupdatedb)。

locate '*' | shuf -n 1

素晴らしく、短く、洞察に満ちています。find / -xdev -type d自体は機能しますが、find / -xdev -type d | shuf -n 1はエラーメッセージを表示します。
Abdul Al Hazred

1
@AbdulAlHazredあなたはどのメッセージを言っていませんが、それらは「アクセスが拒否されました」というエラーだと思います。rootとしてコマンドを実行するか、エラーをstderr:に送信してエラーを無視してくださいfind / -xdev -type d 2>/dev/null
terdon

1
あなただけ行うことができませんでしたfind / \( -path /sys -o -path /proc \) -prune -o -type dあなたはより多くのようなdirsに除外したい場合でしょうが便利/dev/tmp、などを
BrainStone

6

GNU findでは、たとえば次のような正規表現オプションを使用することもできます。

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

これは、最も優れたアプローチです(確かに、他のOSと同様に、/ procが実装されていない他のOSのように、gnu linuxで検索/使用できるようにするgnuオプションがあります;-)
Florian Heigl
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.