ls 명령의 결과 인 모든 파일을 어떻게 열 수 있습니까?


10

텍스트 편집기를 사용하여 ls 명령의 결과 인 모든 텍스트 파일을 열고 싶습니다. 어떻게해야합니까?

답변:


12

Gilles가 옳습니다 . ls파일 이름 글로브 확장 ls을 전혀 사용하지 않고도 명령 줄에서 훨씬 쉽게 수행 할 수 있기 때문에 정말 나쁜 예입니다 ! 소위 "텍스트 파일"에 파일 이름 확장자가 있으면이를 식별 할 수 있습니다.

editor-command *.txt

기술을 설명하기 위해 파일 이름 만 일치 할 수없는보다 복잡한 예제를 사용하고 파일 이름 대신 내용을 기반으로 파일을 엽니 다. 문자열 "content-type"이 포함 된 모든 파일을 열려고한다고 가정하겠습니다.

편집기가 여러 파일 이름을 허용하고 개별 버퍼에서 한 번에 모두 열거 나 순차적으로 작동한다고 가정하면 간단하게 실행할 수 있습니다.

editor-command $(grep -i content-type)

이제 원래 질문으로 돌아가서 텍스트 파일인지 또는 이름을 기반으로하지 않는지 알 수 있습니다. 그런 다음 다른 프로그램을 사용하여 식별 한 다음 해당 데이터를 기반으로 열어야합니다. 프로그램 file은 어떤 종류의 파일인지 알려주고 텍스트 파일에 대해서만 해당 목록을 grep 한 다음 다음과 같이 일치하는 파일 이름 만 열 수 있습니다.

editor-command $(file -ni * | grep 'text/plain' | cut -d: -f1)

$()컨스 트럭 트 내부의 명령 체인 출력은 편집기의 인수로 사용됩니다. 때로는 두 단계로이 작업을 수행합니다. 파일 세트를 살펴보고 문자열 "content-type"을 포함하는 모든 XML 파일 목록을 가져 오십시오.

find -type f -iname '*xml' | xargs grep -Hi 'content-type' |  cut -d: -f1

... 열기 원합니다. 그런 다음 마지막 명령 기록 바로 가기를 사용하여 다음을 수행하십시오.

vim $(!!)

... 가장 좋아하는 편집기 인 vim에서 이전 명령의 모든 결과를 열기 위해.

편집기가 한 번에 하나의 파일 만 허용하고 생성 된 편집기를 유지 해야하는 경우 stdio가 필요한 터미널 기반 편집기를 사용하는지 여부에 따라 jmtd의 응답 에서 xargs또는 for루프 변형을 사용해야합니다 .



@Gilles : 우리 모두가 볼 수 없다는 것을 지적 해 주셔서 감사합니다. @ c0smikdebris 참고로 이름이 텍스트 인 파일과 일치하는 명확한 방법이없는 경우를 포함하여 내 대답을 완전히 다시 작성합니다.
Caleb

$ ()는 내가 실제로 찾던 것입니다. 여기서 ls를 예로 사용한다고 언급 했어야합니다. 두 답변 모두 +1
c0smikdebris

"내가 가장 좋아하는 편집기". @Caleb을 지정할 필요가 없습니다. 대답의 시작 부분에서 거의 확실하기 때문에 ahahah! 최고의 편집자!
엔리코 마리아 데 안젤리 스

4

현재 디렉토리에서 라는 파일 .txt(예 :)을 모두 열려면 *.txt:

$EDITOR *.txt

여기서 $EDITOR여러분이 좋아하는 편집기입니다 예를 들어 gedit *.txt, nano *.txt, vim *.txt, emacs *.txt또는 무엇 이건. *현재 디렉토리의 모든 파일을 일치시키기 위해 사용하십시오 .

ls명령은 포함되지 않습니다. 작업은 ls실제로 파일 목록을 표시하지는 않지만 디렉토리에서 파일을 호출 할 때 발생합니다. 어디 ls유용 파일 특성 (수정 시간, 권한, 등등 크기)를 표시입니다. 특정 와일드 카드 패턴과 일치하는 많은 파일에서 무언가를 수행하려면 쉘의 글로브 로 충분합니다.

충분한 고급 편집기를 사용하면 내부에서이를 수행 할 수 있습니다. 예를 들어, Emacs에서 일반 파일 열기 명령 ( C-x C-f)을 사용하고을 입력하십시오 *.txt.

하위 디렉토리 (zsh 또는 bash ≥4)의 파일도 일치 시키려면을 사용할 수 있습니다 $EDITOR **/*.txt.


실제로는 편집기마다 다릅니다. 모든 편집자가 모든 무료 명령 줄 인수를 열 파일로 취급하거나 한 번에 둘 이상의 파일 열기를 지원하지는 않습니다.
jmtd

2

텍스트 편집기의 뉘앙스에 따라 다릅니다. 고급 편집기는 한 인스턴스에서 명령 행에서 여러 파일 열기를 처리 할 수 ​​있습니다. 그러나 예를 들어 편집기 (아래 예에서 $ EDITOR)는 한 번에 하나씩 만 열 수 있다고 가정하십시오. 당신은 파이프 적절한 출력해야 find에를 xargs. 이것은 또한 $ EDITOR가 TTY를 인수하지 않기 때문에 (그래서 그래픽을 사용하여)

find . -maxdepth 1 -type f -name '*.c' -print0 | xargs -r0n 1 $EDITOR

콘솔 편집기를 사용하려면 셸 루프가 더 적합 할 수 있지만 공백 문자와 기타 여러 가지를 접거나 대체하여 일반적이지 않은 많은 파일 이름에 실패하는 경우 :

for i in *.c; do $EDITOR "$i"; done

2
ls의 출력을 구문 분석하지 마십시오! $EDITOR *.c또는을 사용하십시오 for i in *.c; do $EDITOR "$i"; done.
Gilles 'SO- 악마 중지'

잘 잡기-적절하게 편집되었습니다.
jmtd

for공백 문자 축소 / 변경을 포함하여 많은 파일 이름 의 경우에는 실패합니다.
jmtd

지금 작성된 것처럼이 for사례는 모든 파일 이름으로 작동합니다 (가능한 이름 은 일부 편집기로 시작 -하거나 수정). +for i in ./*.c
Gilles 'SO- 악마 중지'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.