
rm
정규식을 사용하여 명령을 수정하거나 무언가를 제거 할 수 있습니까 ? 현재 디렉터리의 모든 파일(확장자가 ? 인 파일 제외 ) *.bmp
은 또는 같은 파일이 있으므로 대소문자를 구분하지 않아야 합니다 .*.wav
*.png
*.BMP
*.bMP
답변1
@ChrisDown이 제공했습니다.떨어져 bash
있는이는 파일과 디렉터리의 차이점과 삭제할 파일이 없는지 여부를 고려합니다.
그러나 rm
이러한 경우에는 실패하므로 명령을 다음과 같이 단순화할 수 있습니다(계속 사용할 수 있음 bash
).
shopt -s extglob nocaseglob
rm -- !(*.bmp|*.wav|*.png)
두 셸 옵션을 모두 기본값으로 재설정하는 것을 잊지 마세요. 내 경우에는 extglob
대화형 셸에 이미 설정되어 있으므로 방금 필요했습니다.
shopt -u nocaseglob
또는 서브셸에서 다음 두 명령을 실행합니다.
(shopt -s extglob nocaseglob
rm -- !(*.bmp|*.wav|*.png))
rm
어떤 파일이 삭제될지 미리 확인 하려면 echo
.
숨겨진 파일도 제거하려면 해당 dotglob
옵션을 추가하세요.
답변2
bash
를 사용하는 경우 및 를 조합 하여 사용할 수 있습니다 .extglob
nocaseglob
shopt -s extglob nocaseglob
for file in !(@(*.bmp|*.wav|*.png)); do
[[ -f "${file}" ]] && files+=( "${file}" )
done
(( ${#files[@]} )) && rm "${files[@]}"
그렇지 않으면 다음과 같이 할 수 있습니다:
find . -maxdepth 1 -type f ! \( -iname '*.bmp' -o -iname '*.wav' -o \
-iname '*.png' \) -delete
답변3
사용 zsh
, 삭제정기적인.bmp
, .png
,를 제외한 파일 .wav
(대소문자 구분):
setopt extendedglob # best in ~/.zshrc
rm -- ^*.(#i)(png|bmp|wav)(D.)
( D
확장자에 관계없이 숨김 파일을 유지하려면 위 항목을 삭제하세요.)
답변4
실수로 어리석은 일을 하지 않도록 잠시 시간을 내어 여러 단계를 거쳐 이 작업을 수행하는 것이 좋습니다.
삭제할 파일을 식별하는 명령을 만듭니다.
ls | grep -v *.bmp | grep -v *.wav # current directory
또는
find . -type f | grep -v *.bmp # current and sub directories
반환된 파일 목록이 삭제하려는 파일인 경우
마지막 명령을 호출하고
xargs rm
이 명령을 추가합니다.ls | grep -v *.bmp | grep -v *.wav | xargs rm