방금 현재 디렉토리에서 파일을 가져오고 .mp4 .mp3 .exe 파일 만 출력합니다. 그래서 나는 이것을 할 수 있다고 생각했습니다.
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
그러나 아니요, 첫 번째 grep은 mp4를 출력하기 때문에 다른 2 grep은 사용되지 않습니다.
어떤 아이디어? 추신 : Slow Leopard에서이 스크립트 실행
방금 현재 디렉토리에서 파일을 가져오고 .mp4 .mp3 .exe 파일 만 출력합니다. 그래서 나는 이것을 할 수 있다고 생각했습니다.
ls | grep \.mp4$ | grep \.mp3$ | grep \.exe$
그러나 아니요, 첫 번째 grep은 mp4를 출력하기 때문에 다른 2 grep은 사용되지 않습니다.
어떤 아이디어? 추신 : Slow Leopard에서이 스크립트 실행
답변:
왜 안되 겠어요 :
ls *.{mp3,exe,mp4}
어디서 배웠는지 모르겠지만 이것을 사용하고 있습니다.
ls: *.exe: No such file or directory
예 :ls *.{zip,tar.gz,tar} 2>/dev/null
다음과 함께 정규식을 사용하십시오 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)'
find . -iregex '.*\(mp3\|mp4\|exe\)'
mysupermp3.jpg
추가하는 것을 고려 하십시오$
\\.
egrep
-확장 된 grep-여기서 도움이 될 것입니다
ls | egrep '\.mp4$|\.mp3$|\.exe$'
일을해야합니다.
ls
터미널에 (또는 -C
옵션으로) 다중 열 출력을 생성합니다. ls
파이프 (또는로 -1
)에는 단일 열 출력이 있습니다. (비교 출력 ls
과을 ls | cat
).
가장 쉬운 방법은 ls를 사용하는 것입니다.
ls *.mp4 *.mp3 *.exe
ls
어떤 종류의 자동 옵션이 없다는 것에 놀랐습니다 .
grep 필요가 없습니다. 쉘 와일드 카드가 트릭을 수행합니다.
ls *.mp4 *.mp3 *.exe
당신이 실행 한 경우
shopt -s nullglob
일치하지 않는 글롭은 모두 제거되며 확장되지 않은 명령 행에 남아 있지 않습니다.
대소 문자를 구분하지 않는 글 로빙을 원하면 * .mp3는 foo.MP3와 일치합니다.
shopt -s nocaseglob
-R
하위 디렉토리에 일치하는 파일을 나열하는 옵션 과 함께 이것을 사용하려고 시도 하지만 옵션이 효과가없는 것 같으며 여전히 현재 디렉토리의 결과 만 얻습니다.
OSX 사용자의 경우 :
당신이 사용하는 경우 ls *.{mp3,exe,mp4}
, 그것은 오류가 발생합니다 그 확장 기능 중 하나가 아무런 결과가없는 경우.
를 사용 ls *.(mp3|exe|mp4)
하면 확장자 중 하나에 0 개의 결과가 있더라도 해당 확장자와 일치하는 모든 파일이 반환 됩니다 .
ls *.@(mp3|exe|mp4)
. shopt -s extglob
이 작업이 필요 합니다. 그건 그렇고, ls
쓸모없는 것입니다, 당신은 할 수 있습니다 printf '%s\n' *.@(mp3|exe|mp4)
.
ls -R | findstr ".mp3"
ls -R
=> 하위 디렉토리를 재귀 적으로 나열
shopt -s nullglob
하고 참조하면*.exe *.mp3 *.mp4
됩니다. 참조 mywiki.wooledge.org/ParsingLs