もともと発見はOS Xで動作しましたが、Ubuntu 16.04では動作しません。
find $HOME -type f -name "*.tex" -exec grep -l "masi" {} + | vim -R -
(これは単純化されたバージョンです。vim
部分は省略できますが、ここでは結果が処理中であることだけが表示されます。)
Ubuntu 16.04では、これらの権限拒否メッセージが表示されます。実際、これらのファイルはほとんど.dotFilesのようです。
drwx------ 2 root root 4096 touko 29 23:59 .gvfs
私は合わせることができません。パスワード私が検索したものを見つけました。したがって、すべてのファイルが検索されますが、権限が拒否されたファイル(! -readable -prune
)は除外されます。擬似コード
find $HOME -type f -name "*.tex" \
-o ! -readable -prune -o \
-exec grep -l "masi" {} +
しかし、リストのような多くのメッセージを提供すると、あまりにも拡張されているようです。
grep: /home/masi/.conda/envs/my_root/src/linux-headers-4.2.0-27/include/linux/power: Is a directory`
...
OS Xとはかなり異なります。代わりに、成功せずに構造を解析しようとしましたが、-perm a+r
依然として権限拒否メッセージが表示されます。
Gilesの答えを振り返ると
私の最終的な解決策は
find $HOME +perm 0666 -type f -name ...
readable
これはPOSIXではなく、OSXでは機能しないためです。
検索で検索と除外を組み合わせる方法は?
ベストアンサー1
あなたの質問に対する答えは、ブール代数と演算子の優先順位に関連しています。あなたのfind
コマンドは次のとおりです。
- 通常のファイルで名前が一致すると、
*.tex
何もしません。 - そうではなく、読み取れない場合は繰り返さずにスキップします。
- それ以外の場合は実行してください
grep
。
読みやすさテストから始めましょう。これにより、目的のファイルと一致するテストが実行したいコマンドに追加されます。
find ~ ! -readable -prune -o \
-type f -name "*.tex" -exec grep -l "masi" {} +
あるいは、LinuxとOSXを使用しているように見えるので、GNU grepの再帰ツールを使用できます。
grep -s -r --include='*.tex' -l 'masi' ~
ホームディレクトリに読み込めないファイルがあってはいけません。ルートに属するファイルがあるとは、一部のプログラムをルートとして実行し(おそらく経由でsudo
)、自動生成されたステータスファイルまたは一時ファイルが残っていることを意味します。
~/.gvfs
うんルート重力加速度センサーマウントポイント階層は、root以外のユーザーに属している必要があります。そうしないと、実行したいGVFSのインストール(リムーバブルメディア、ネットワークドライブなど)が機能しなくなります。ランニングsudo rmdir ~/.gvfs
。まだ使用していて削除できない場合は、別の場所に移動して(sudo mv ~/.gvfs
〜/.gvfs.root`)、現在インストールされているものを削除したら削除してください。