development

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

big-blog 2020. 6. 25. 07:32
반응형

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 플래그를 추가하십시오.


OSX 사용자의 경우 :

당신이 사용하는 경우 ls *.{mp3,exe,mp4}, 그것은 오류가 발생합니다 그 확장 기능 중 하나가 아무런 결과가없는 경우.

를 사용 ls *.(mp3|exe|mp4)하면 확장자 중 하나에 0 개의 결과가 있더라도 해당 확장자와 일치하는 모든 파일이 반환 됩니다 .


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

ls -R | findstr ".mp3"

ls -R => 하위 디렉토리를 재귀 적으로 나열


나를 위해 일한 한 가지 예가 있습니다.

find <mainfolder path> -name '*myfiles.java' | xargs -n 1 basename

참고 URL : https://stackoverflow.com/questions/1447625/list-files-with-certain-extensions-with-ls-and-grep

반응형