.tr0
내 디렉토리에 , .scs
, .mt0
, .ic0
, .log
, .st0
, 등 많은 파일 확장자가 있습니다 .pa0
.
다른 모든 확장 프로그램을 유지 .tr0
하고 제거하고 싶습니다 ..scs
교체할 수 있는 효과적인 방법이 있습니까?
rm *.mt0 *.ic0 *.log *.st0 *.pa0
답변1
앞쪽:
find . ! \( -name '*.tr0' -o -name '*.scs' \) -type f -exec echo rm -f {} +
echo
(명령어를 실행하고 싶을 때는 제거하세요)
find
당신이 지원하는 경우 -delete
:
find . ! \( -name '*.tr0' -o -name '*.scs' \) -type f -delete
위 명령은 재귀적으로 작동합니다. 현재 디렉토리에만 있으려면 다음을 수행하십시오.
find . ! -name . -prune ! \( -name '*.tr0' -o -name '*.scs' \) -type f
답변2
셸 옵션( ) 또는 다음 bash
을 활성화하는 등 확장된 와일드카드 패턴을 허용하는 셸에서 :extglob
shopt -s extglob
ksh93
rm ./*.!(tr0|scs)
확장 쉘 와일드카드 패턴은 !(pattern-list)
-delimited에 지정된 패턴을 제외한 모든 패턴과 일치합니다.|
pattern-list
점이 포함된 경우 패턴은 디렉터리 이름과도 일치하지만 rm
디렉터리는 기본적으로 삭제되지 않으므로 일부 오류 메시지만 표시됩니다.
이 문제를 해결하려면 일치하는 각 이름을 테스트하여 일반 파일을 참조하는지 확인하는 루프를 사용할 수 있습니다.
for name in ./*.!(tr0|scs); do
[ -f "$name" ] && rm "$name"
done