터미널을 사용하여 파일을 검색하고 클릭하면 원하는 프로그램으로 열 수 있습니까?

터미널을 사용하여 파일을 검색하고 클릭하면 원하는 프로그램으로 열 수 있습니까?

파일을 검색할 때 찾은 검색 결과에서 터미널 내의 파일에 대한 링크를 어떻게든 생성하고 싶습니다. 터미널 내에서 하이퍼링크를 클릭하는 것과 동일하지만 이 경우 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)공백으로 구분된 파일 이름 목록이 생성되기 때문입니다. 공간이내에파일 이름은 쉘이 실제로 공백으로 구분된 두 개의 파일 이름이라고 생각하게 만듭니다.

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원하는 파일을 다시 얻으려면 일반적인 방법으로 사용하십시오 .

관련 정보