ls 명령으로 생성된 모든 파일을 어떻게 열 수 있나요?

ls 명령으로 생성된 모든 파일을 어떻게 열 수 있나요?

텍스트 편집기를 사용하여 ls 명령으로 생성된 모든 텍스트 파일을 열고 싶습니다. 어떻게 해야 하나요?

답변1

자일스는 절대적으로 옳습니다ls매우 나쁜 예입니다. 파일 이름 전역 확장은 !를 사용하지 않고도 명령줄에서 훨씬 더 쉽게 수행할 수 있기 때문입니다 ls. 소위 "텍스트 파일"에 해당 파일을 식별할 수 있는 파일 확장자가 있는 경우 다음을 수행할 수 있습니다.

editor-command *.txt

기술을 시연하기 위해 파일 이름 일치만으로는 수행할 수 없는 보다 복잡한 예를 사용하고 이름만이 아닌 내용을 기반으로 파일을 열어 보겠습니다. "content-type" 문자열이 포함된 모든 파일을 열고 싶다고 가정해 보겠습니다.

편집기가 여러 파일 이름을 허용하고 이를 별도의 버퍼에서 한 번에 열거나 순차적으로 처리한다고 가정하면 다음을 간단히 실행할 수 있습니다.

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

이제 원래 질문으로 돌아가서 이름을 기반으로 한 텍스트 파일인지 여부를 모른다고 가정해 보겠습니다. 그런 다음 다른 프로그램을 사용하여 해당 데이터를 기반으로 식별하고 열어야 합니다. 프로그램은 file특정 파일의 유형을 알려줍니다. 목록을 검색하여 텍스트 파일만 찾은 다음 다음과 같이 일치하는 파일 이름만 열 수 있습니다.

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

구성 내의 명령 체인 출력은 $()편집기에 대한 인수로 사용됩니다. 저는 가끔 2단계로 이 작업을 수행합니다. 파일 세트를 보고 "content-type" 문자열이 포함된 각 xml 파일의 목록을 가져온다고 가정해 보겠습니다.

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

...그리고 열어보기로 결정했습니다. 그런 다음 마지막 명령 기록 바로 가기를 사용하고 다음을 수행합니다.

vim $(!!)

...내가 가장 좋아하는 편집기인 vim에서 이전 명령의 모든 결과를 엽니다.

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

답변2

현재 디렉터리에서 Something이라는 이름의 .txt모든 파일을 열려면 다음을 수행하세요.*.txt

$EDITOR *.txt

, , 또는 무엇이든 $EDITOR좋아 하는 편집기는 어디에 있습니까 ? 현재 디렉터리의 모든 파일을 일치시키려면 just를 사용하세요 .gedit *.txtnano *.txtvim *.txtemacs *.txt*

ls이 명령은 관련되지 않습니다. ls디렉토리에서 호출할 때 발생하더라도 실제로는 파일 목록을 표시 하지 않습니다. 이것이 유용한 곳은 ls파일 속성(수정 시간, 권한, 크기 등)을 표시하는 것입니다. 특정 와일드카드 패턴과 일치하는 여러 파일에 대해 일부 작업을 수행하려면 쉘의구체충분할 것입니다.

충분히 발전된 편집기를 사용하면 내부에서 이 작업을 수행할 수 있습니다. 예를 들어 Emacs에서는 일반 파일 열기 명령( C-x C-f) 을 사용하고 *.txt.

zsh 또는 bash ≥4의 하위 디렉터리에 있는 파일도 일치시키려면 $EDITOR **/*.txt.

답변3

이는 텍스트 편집기의 미묘한 차이에 따라 다릅니다. 고급 편집기는 단일 인스턴스의 명령줄에서 여러 파일 열기를 처리할 수 있습니다. 그러나 예를 들어 편집기(아래 예의 $EDITOR)는 한 번에 하나만 열 수 있습니다. 적절한 출력 findxargs.

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

콘솔 편집기를 사용하려는 경우 쉘 루프가 더 적합할 수 있지만 특이한 파일 이름이 많아 실패할 경우(공백 문자 및 기타 다양한 항목을 접거나 대체하여):

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

관련 정보