権限が拒否された場合、ルート検索除外は機能しません。

権限が拒否された場合、ルート検索除外は機能しません。

パスを除外すると奇妙な動作が発生します。find:

find ~ -not -path "~/sandboxes/*" -name 'some-file.vmdk'

以下を提供します。

/home/user/VMs/win/some-file.vmdk
find: ‘/home/user/sandboxes/debian7.amd64.buildd/root/...’: Permission denied
find: ‘/home/user/sandboxes/debian7.amd64.buildd/var/...’: Permission denied

何が問題なの?

PS残念ながら-prune動作しません。

find ~ -path "/home/user/sandboxes/*" -prune -o -name 'some-file.vmdk'

より奇妙な結果を提供します。

/home/user/nemu_vm/win/some-file.vmdk
/home/user/sandboxes/debian7.amd64.buildd
/home/user/sandboxes/debian9.amd64.buildd

便利なリンク

答え1

注文

find ~ -path "/home/user/sandboxes/*" -prune -o -name 'some-file.vmdk'

印刷

/home/user/sandboxes/debian7.amd64.buildd
/home/user/sandboxes/debian9.amd64.buildd

アクションが提供されていない場合のデフォルトのアクションは、見つかったパス名を印刷するためです。上記のパス名を見つけてそのパスをクリーンアップします。検索パスを切り捨てても、そのパス名が印刷されないわけではありません。

-printしかし、次のように最後に追加すると

find "$HOME" -path "$HOME/sandboxes" -prune -o -name 'some-file.vmdk' -print

その後、これらのパス名は次のようになります。いいえ印刷されます。これは、明示的なタスク(-print)があるため、基本タスクがトリガーされないためです。-printの右側にのみ適用されます-o

これは必須ではなく、特にスクリプトで*この変数を$HOME使用する方が簡単です。~


最初のコマンド、

find ~ -not -path "~/sandboxes/*" -name 'some-file.vmdk'

~引用符で拡張されていないため、機能しない可能性があります。

を使用すると仮定すると、$HOME検索パスも切り捨てられません。つまり、入力を続けますが、~/sandboxesそのパスの下にパス名は印刷されません。ディレクトリに移動してアクセスできないディレクトリに到達すると、依然として権限エラーが発生します。

答え2

次のことを試すことができます。

find ~ \! -path "*/sandboxes/*" -name 'some-file.vmdk'

または-pruneを使用してください。

find ~ -path "*/sandboxes" -prune -o -name 'some-file.vmdk'

しかし、〜/ sandboxes印刷を削除する方法が見つかりません。

関連情報