[bash] ls 및 grep을 사용하여 특정 확장자를 가진 파일 나열

방금 현재 디렉토리에서 파일을 가져오고 .mp4 .mp3 .exe 파일 만 출력합니다. 그래서 나는 이것을 할 수 있다고 생각했습니다.

ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$

그러나 아니요, 첫 번째 grep은 mp4를 출력하기 때문에 다른 2 grep은 사용되지 않습니다.

어떤 아이디어? 추신 : Slow Leopard에서이 스크립트 실행



답변

왜 안되 겠어요 :

ls *.{mp3,exe,mp4}

어디서 배웠는지 모르겠지만 이것을 사용하고 있습니다.


답변

다음과 함께 정규식을 사용하십시오 find.

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\n'

파일 이름을 파이핑하는 경우 :

find . -iregex '.*\.\(mp3\|mp4\|exe\)' -printf '%f\0' | xargs -0 dosomething

공백이나 줄 바꿈이 포함 된 파일 이름을 보호합니다.

OS X find-E(향상된) 옵션이 사용될 때 교대 만 지원합니다 .

find -E . -regex '.*\.(mp3|mp4|exe)'


답변

egrep -확장 된 grep-여기서 도움이 될 것입니다

ls | egrep '\.mp4$|\.mp3$|\.exe$'

일을해야합니다.


답변

가장 쉬운 방법은 ls를 사용하는 것입니다.

ls *.mp4 *.mp3 *.exe


답변

경우에 따라 : 왜 사용하지 find않습니까?

find -iname '*.mp3' -o -iname '*.exe' -o -iname '*.mp4'


답변

grep 필요가 없습니다. 쉘 와일드 카드가 트릭을 수행합니다.

ls *.mp4 *.mp3 *.exe

당신이 실행 한 경우

shopt -s nullglob

일치하지 않는 글롭은 모두 제거되며 확장되지 않은 명령 행에 남아 있지 않습니다.

대소 문자를 구분하지 않는 글 로빙을 원하면 * .mp3는 foo.MP3와 일치합니다.

shopt -s nocaseglob


답변

여전히 대체 솔루션을 찾고있는 경우 :

ls | grep -i -e '\\.tcl$' -e '\\.exe$' -e '\\.mp4$'

필요한 경우 더 많은 -e 플래그를 추가하십시오.