「検索」結果のいずれかを選択し、指定されたアプリケーションで開く方法

「検索」結果のいずれかを選択し、指定されたアプリケーションで開く方法

findme次のコードで呼び出されるbashスクリプトがあります。

#!/bin/bash
locate -Abi '*\.'$1 $2 | grep --color=always -ni $2 | less -R

ファイル名(次の引数を指定)にパターンがあり、指定されたファイル拡張子(スクリプトに指定された最初の引数)を持つすべてのファイルを検索します。
次のコマンドを実行すると:

user@machine$ findme pdf classifi

pdfを含むすべてのファイルを検索します。classifiだから私は次のようなものを得ることができます。

1:/ホーム/ユーザー/Dropbox/SharedWithFriends/数学/分類cations2000.pdf
2:/home/user/Dropbox/SharedWithFriends/math/分類カチオン2010.pdf

問題は次のとおりです。 「次のタスクを自動化するために結果を表示した後、数値とビューアを要求するbashスクリプトコードを提供できますか?」

たとえば、次のように入力すると:

> 2 evince

検索結果の2番目の項目に対してスクリプトが実行されevince2つまり、これが前の検索結果に入力した内容であれば、次のようになります。

evince /home/user/Dropbox/SharedWithFriends/math/classifications2010.pdf

ベストアンサー1

findmegrepこれは結果を抽出する機能のバリエーションですが、結果に番号を付けたりページを付けたりする代わりに、内部配列からless結果を一覧表示し、プロジェクトとプログラムを選択するように求められます。

#!/usr/bin/env bash

readarray -O 1 -t results < <(locate -Abi '*\.'"$1" "$2" | grep --color=always -i "$2")

for((i=1; i <= ${#results[*]}; i++))
do
  printf "%d: %s\n" $i "${results[i]}"
done
read -p "> " item program
$program "${results[item]}"

ファイル名とgrepパラメータのスペースをよりよく処理するために、元のスクリプトにいくつかの引用符を追加しました。readarray結果がゼロ以外のインデックス1から始まり、grepの番号に対応するように呼び出しを調整しました。

おすすめ記事