터미널에서 문서를 열되 이름으로


19

터미널에서 파일의 이름이 아니라 폴더의 (번호) 위치로 파일을 열 수 있습니까? 아니면 다른 옵션?

이름이 너무 길기 때문입니다.


5
하고 싶은 일을 편집 하고 예를 들어 주세요 .
디저트

7
아니요, 코딩하지 않아도됩니다. 그러나 "탭"완성을 사용할 수 있습니다.
Rinzwind

2
너무 오래?
Carl Witthoft

2
파일 이름의 처음 두세 글자를 입력 한 다음 Tab키를 눌러 보셨습니까 ?
Henrique

답변:


44

아직 Tab완성을 발견하지 못했을 것입니다 ( 여기 참조 ).

터미널에 파일 이름을 입력하는 동안 첫 글자 몇 개만 입력하면 Tab마법을 볼 수 있습니다!


7
또는 파일 이름의 처음 몇 글자를 입력하고 *어떤 이유로 탭 완성 기능을 사용하지 않으려면을 입력하십시오. 또는 *abc*파일 이름에 abc어딘가에있는 경우 에도 (원하는 파일 이름에 고유 한 하위 패턴을 사용하십시오). 또는 마우스를 사용하여 파일 이름을 복사 / 붙여 넣기 만하면됩니다.
Guntram Blohm은

4
@guntram 또는 파일을 터미널로 끌어서 놓을 수도 있습니다.
pomsky

6
@ GuntramBlohm 당신은 그 대답을해야합니다. 나는이 대답과는 완전히 다른 것으로 생각합니다.
DQdlM

32

말 그대로 질문에 대답하면서 재미를 위해 :

여기에 이미지 설명을 입력하십시오

#!/usr/bin/env python3
import os
import subprocess

show_hidden = False

currfiles = os.listdir("./")
if not show_hidden:
    currfiles = [f for f in currfiles if not f.startswith(".")]
n = 1
for f in currfiles:
    print(str(n) + ". " + f)
    n = n + 1

picked = int(input("Quick, quick, give me a number:\n"))
subprocess.run(["xdg-open", currfiles[picked - 1]])

실제로 작동하는 방식

  1. 터미널의 작업 디렉토리에서 "o"를 실행하십시오 (명령으로).
  2. 현재 디렉토리의 내용이 번호가 매겨져 나열됩니다. 번호를 선택하면 품목이 열립니다.

    여기에 이미지 설명을 입력하십시오

설정

... 쉽습니다 :

  1. 아직없는 경우 홈 디렉토리에 "bin"이라는 폴더를 작성하십시오.
  2. 스크립트를 빈 파일로 복사하고 (문자 그대로) "o"(확장자 없음)로 저장 한 후 실행 파일로 만듭니다.
  3. 로그 아웃했다가 다시 입력하고 명령을 사용하여 시작하십시오.

    $ o
    

    터미널에서

NB

숨겨진 파일도 표시하려면 변경하십시오

show_hidden = False

으로:

show_hidden = True

1
경우 ~/bin귀하의 PATH에없는, 당신은 (같은 라인을 넣어, 예를 들어 추가해야합니다 export PATH="$PATH:~/bin"으로 .bashrc.profile.)
닉 마테오

b0fh의 답변을 참조하십시오 -이것은 bash에서 내장 된 것 같습니다
mgarciaisaia

1
@kundor nope, 우분투가 아닙니다. 로그 아웃 한 후 작업을 수행하거나 간단히 수행하십시오 source ~/.profile.
Jacob Vlijm

@JacobVlijm ~/bin은 전혀 내장되어 있지 않습니다. 우분투와 데비안은 사용자 정의 ~/.profile라인을 제공 if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" ; fi합니다. Mac OS X 및 CentOS에서는 직접 구성해야합니다. 우분투가 IT 부서에 의해 개인에게 제공되면 우분투가 ~/.profile기본 우분투와 같지 않을 가능성이 높 으므로 항상 ~/bin표준이 아닌 것을주의하는 것이 좋습니다 . 옵션으로 ~/.profile쉘을 시작하면 Bash도 무시할 수 있습니다--no-profile
Sergiy Kolodyazhnyy

@mgarciaisaia 원래 코멘트는 실제로 당신을위한 것입니다 ^
Sergiy Kolodyazhnyy

28

Bash에는 파이썬이나 다른 타사 도구를 호출하지 않고 한 줄 로이 작업을 수행 할 수있는 알려진 기능이 거의 없습니다.

select file in *; do open "$file"; break; done

8
우수한! open그래도 Mac OS를 사용하지 않는 한 일반적으로 작동하지 않습니다. xdg-open아마도 대부분의 GNU / Linux 시스템에서 트릭을 수행 할 것입니다.
Nick Matteo

1
그러나 bash는 존재하는 유일한 쉘이 아닙니다. :-)
jamesqf 5

16

순수한 bash에서 다음 select명령문을 사용하십시오 .

PS3='Quick, quick, give a number: '

select file in *
do 
    xdg-open "$file"
    break
done

PS3 설정은 눈에 띄지 않습니다. 그대로두면 기본 프롬프트 만 표시됩니다. break 문을 생략하면 CTRL-D 또는 CTRL-C를 누를 때까지 select 문이 반복됩니다.

물론 하나의 라이너로 실행할 수도 있습니다.

select file in *; do xdg-open "$file"; break; done

솔루션이 충분하고 충분히 잘 작동합니다. 한 걸음 더 나아가 별칭 또는 기능을 만들 수 있습니다
Sergiy Kolodyazhnyy

7

mcMidnight Commander를 설치하여 사용할 수 있습니다 . 이전 Norton Commander에서 영감을 얻은 메뉴 등의 텍스트 사용자 인터페이스로, 사람들이 MSDOS (Windows 이전)를 사용했을 때 인기가있었습니다.

sudo apt update
sudo apt install mc

터미널 창이나 텍스트 화면에서 시작하십시오.

mc

5

$ ls

results.log
string
Templates
textfile
time
time.save
vegetables
vegetablesbsh

한판 승부

ls | sed -n 3p

세 번째 파일 이름을 인쇄 합니다

Templates

열어 봐-

xdg-open "$(ls | sed -n 3p)"

일반적으로 작동합니다.

스크립트에 넣어

#!/bin/bash

xdg-open "$(ls | sed -n "$1"p)"

스크립트 이름 : open

홈 폴더에 저장하십시오. 운영:

./open file_number



3

Linux 파일 시스템에서 파일 이름에는 inode 라는 매우 흥미로운 속성이 있습니다 . 디렉토리 (또는 폴더)는 inode 목록이며 해당 파일 이름이 해당 inode를 가리 킵니다. 따라서 inode 번호를 알고 있으면 find유틸리티를 사용하여 파일을 찾고 특정 작업을 수행 할 수 있습니다. 다른 로케일, 특수 문자 로 파일 이름을 처리 하거나 실수로라는 디렉토리를 만들 때~ 특히 유용합니다 .

예를 들어

$ ls -i1
1103993 crs.py
1103743 foobar.txt
1147196 __pycache__
1103739 'with'$'\n''newline.png'
1103740 yellowstone.jpg

$ find . -type f -inum 1103743 -exec xdg-open {} \; -and -quit

이 작업은 현재 작업 디렉토리 (로 .표시됨)를 탐색 하고 inode 번호가 1103743 인 파일 인 디렉토리 항목을 찾습니다. 파일을 찾으면 xdg-open기본 응용 프로그램으로 파일을 열고 find나중에 종료됩니다. 여분의 이유 -and-quit방지하는 것입니다 xdg-open(두 번 같은 파일을 여는 것과 동일) 파일에 대한 하드 링크가 존재하는 경우 파일을 재개.


1

일부 파일을 작성하십시오.

$ for i in $(seq -w 0 20); do echo "This is file $i." > $i.txt; done
$ ls
00.txt  03.txt  06.txt  09.txt  12.txt  15.txt  18.txt
01.txt  04.txt  07.txt  10.txt  13.txt  16.txt  19.txt
02.txt  05.txt  08.txt  11.txt  14.txt  17.txt  20.txt
$ cat 16.txt 
This is file 16.

파일을 변수에 넣고 색인으로 파일을여십시오.

$ files=(*)
$ xdg-open "${files[12]}"
# Opens 12.txt in a text editor, which reads "This is file 12."

교체 12열려고하는 인덱스와 함께.


생성하는 외부 프로세스가 하나 밖에 없기 때문에 $ (seq -w 0 20) 대신 {00..20}을 선호합니다. 나는 이식성에 대해 확신하지 못한다. bash-ism일지도 모른다 .. ;-)
Oscar

0

이것은 아마도 질문에 직접 대답하는 가장 간단한 대답 일 것입니다. 다음을 시도하십시오 :

touch file-1 file-2 file-3

두 번째 파일을 열거 나 편집한다고 가정하면 다음을 수행 할 수 있습니다.

echo `ls` | cut -d' ' -f2

다음과 같이 두 번째 파일의 이름을 출력합니다. 예를 들어 다음과 같이 수행하려는 명령의 입력으로 사용할 수 있습니다.

cat $( echo `ls` | cut -d' ' -f2 )

두 번째 파일의 내용을 출력합니다.

ls 인수를 조정하여 파일이 ls로 인쇄되는 순서를 변경할 수 있습니다 man ls. 자세한 내용 은 참조 하십시오.

[업데이트] 이것은 당신이
관찰 한 @wjandrea 덕분 에 파일 이름에 공백이 없다고 가정합니다 .


2
공백이 포함 된 파일 이름의 경우 실패합니다. 이 답변 은 그 문제를 해결하지만 여전히 구문 분석하는 것은 좋지 않습니다 ls. 또한 백틱은 더 이상 사용되지 않습니다. $()대신 사용하십시오 .
wjandrea
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.