텍스트 편집기를 사용하여 ls 명령의 결과 인 모든 텍스트 파일을 열고 싶습니다. 어떻게해야합니까?
텍스트 편집기를 사용하여 ls 명령의 결과 인 모든 텍스트 파일을 열고 싶습니다. 어떻게해야합니까?
답변:
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
루프 변형을 사용해야합니다 .
현재 디렉토리에서 라는 파일 .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
.
텍스트 편집기의 뉘앙스에 따라 다릅니다. 고급 편집기는 한 인스턴스에서 명령 행에서 여러 파일 열기를 처리 할 수 있습니다. 그러나 예를 들어 편집기 (아래 예에서 $ 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
for
공백 문자 축소 / 변경을 포함하여 많은 파일 이름 의 경우에는 실패합니다.
for
사례는 모든 파일 이름으로 작동합니다 (가능한 이름 은 일부 편집기로 시작 -
하거나 수정). +
for i in ./*.c
editor-command *.css
등