
パスを除外すると奇妙な動作が発生します。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印刷を削除する方法が見つかりません。