ファイルを検索するときに見つけた検索結果から、端末内のファイルへのリンクを何とか生成したいと思います。ターミナル内でハイパーリンクをクリックするのと同じですが、この場合はURLではなくファイルになります。可能ですか?
以下は私が使用するコマンドです。
grep -rnw "$2" -e "$1"
...これは私のログから「filezilla」という用語を検索したときのスクリーンショットです。
紫色のテキストをクリックできるようにしたいので、端末でハイパーリンクを開くときと同じように、正確なファイルの場所です。
以下のコマンドを試しましたが、基本プログラム(この場合はマウスパッド)を介して見つかったすべての検索結果が自動的に開きます。
grep -rnw "$2" -e "$1" | xargs mousepad
答え1
最新の端末エミュレータは、限られた範囲でハイパーリンクを処理します。文書を開くために使用するプログラムを「知っている」場合、正しいプロトコルがstdout
前に付けたファイル名を端末ウィンドウに表示できます。私たちはローカルファイルを扱っているので、これは変更を意味します。
/path/to/file/this.doc
到着
file:///path/to/file/this.doc
ハイパーリンクに似ていますが、ドメイン名はありません。シェルがファイルの種類を開く方法を知っている場合は、そうします。
for i in $(ls); do echo "file://$(pwd)/$i"; done
ctrl
+click
編集する
コメントと回答で@tripleeeの大きな改善をもたらすには...
printf "file://$(pwd)/%s\n" *
編集終了
ファイル名にスペースが含まれるファイルには機能しません。拡張すると、$(ls)
スペースで区切られたファイル名のリストが生成されるためです。スペース以内にファイル名は、シェルが実際にスペースで区切られた2つのファイル名であると考えるようにします。
my file.pdf
~になる
my
file.pdf
ファイル名にスペースが含まれている場合は、よりエレガントな解決策が見つかるまでこの方法を試してください。次の質問のためにハッキングするだけです... ;-)
for f in $(find . -type f -maxdepth 1 -iname "*" | sed 's/ /%20/g'); do echo "file://$(pwd)/${f#*/}"; done
find
目的のファイルを再取得するには、通常の方法で使用してください。