コマンドラインでgrepの一部の戻り値に基づいてすべてのファイルを開こうとします。ファイル名のみを返すオプションが利用可能であることを知っていますが、-l
それを他の一連のフラグまたはパラメータと組み合わせてそのファイルへのフルパスを作成したいと思います。
私は同様のことを試しました:
find . -iname "*.ext" | xargs grep -l "mystring" | xargs open
そして次のように:
grep -HR -l mystring . | xargs open
しかし、ほとんど成功していませんでした。また、すべてのサブディレクトリに再帰したいと思います。私は見たこの問題、これは完全に関連していません。
修正する:
私はこのような仕事をすることができました
grep -HR -l mystring . | xargs -L 1 open
問題は、多くのファイルに対してコマンドラインが2つの方法で文句を言うことです。
LSOpenURLsWithRole() failed with error -1712 for the file /Users/blah/blah.ext
The files /blah/blah/file.ext do not exist
、パスにスペースがある場合。
ベストアンサー1
ファイル名にスペースが含まれている場合は、print0
fileオプション、それ以降の-0
オプションxargs
、最後に-I {}
2番目のオプションを使用する必要がありますxargs
。
find . -iname "*.maxpat" -print0 | xargs -0 grep -l "mystring" | xargs -I '{}' open '{}'
emacs
コマンドでテストしますopen
。