쉘의 특정 디렉토리에서 특정 확장자로 끝나는 모든 파일을 삭제하고 싶습니다 /bin/sh
. 나는 /bin/bash
이것을 할 수 있다:regex
rm path/(*.pdf|*.png)
그러나 이것은 일반적인 sh에서는 작동하지 않는 것 같습니다. 정상인가요? 어떤 종류의 정규 표현식이 있습니까 support
?
답변1
아니요, 이는 엄격한 POSIX 호환 셸에서는 작동하지 않습니다. 다음은 규범적인 참조입니다.
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_13_03
보시다시피 정규 표현식은 전혀 없습니다. 심지어 {a,b} 중괄호 표기법도 없습니다.
답변2
에서 언급했듯이사용자 3188445의 답변이는 POSIX와 호환되지 않습니다.
하지만 어쨌든 그렇게 하고 싶다면 다음과 같은 다른 도구를 사용해야 합니다 find
.
find dir/ -maxdepth 1 -type f -regex ".*.pdf\|.*.png" -delete
find
dir/
재귀적으로( ) 검색하지 않고 dir 을 검색하고 -maxdepth 1
, 파일( )만 찾습니다 -type f
. 정규식은 .pdf 및 .png 파일을 일치시키고 -delete
발견된 파일을 삭제합니다.
답변3
/bin/sh에서 사용되는 실제 쉘을 확인하려면 다음을 호출하십시오.
/bin/sh whatshell.sh
그리고 이 페이지에서 Whatshell 스크립트를 얻으세요:
http://www.in-ulm.de/~mascheck/various/whatshell/
예를 들어 전화하십시오.wget http://www.in-ulm.de/~mascheck/various/whatshell/whatshell.sh
일반적인 출력:
$ sh whatshell.sh
SVR4 Bourne shell (SunOS 5 variant)
$ bosh whatshell.sh
SVR4 Bourne shell (SunOS 5 schily variant)
$ bash whatshell.sh
bash 3.2.25(1)-release
$ ksh whatshell.sh
ksh88 Version (..-)11/16/88i
$ ksh93 whatshell.sh
ksh93 Version M 1993-12-28 s+
POSIX에는 /bin/sh에 POSIX 쉘이 필요하지 않습니다. POSIX 쉘 호출을 실행하려면 다음을 수행하십시오.
PATH=`getconf PATH` export PATH
sh
이로 인해 bash가 실행되는 경우 쉘은 POSIX와 호환되지 않을 것으로 예상됩니다.