방금 현재 디렉토리에서 파일을 가져오고 .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 플래그를 추가하십시오.