존재할 수 있는 파일을 삭제하는 방법소문자 대문자사례
예를 들어 file_name은 다음과 같습니다.
- STOCK.Repo 또는
- Stock.REPO 또는
- Stock.repo 또는
- 자사주 매입 계약
- ...등
나는 다음을 실행할 것이다:
rm -f $file_name
목표는 원격 시스템에서 소문자/대문자일 수 있는 stock.repo 파일을 삭제하는 것입니다.
답변1
Bash 특정 솔루션의 경우:
$ shopt -s nocaseglob
rm
그런 다음 명령을 실행하십시오 .
이 옵션을 설정 해제하려면 다음을 사용하세요.shopt -u nocaseglob
완전성을 기하기 위해 대안이지만 덜 우아한 솔루션을 지적하겠습니다.
$ rm [sS][tT][oO][cC][kK].[rR][eE][pP][oO]
답변2
find
다음 명령을 사용하여 이 작업을 수행할 수 있습니다.
find /path/to/directory -type f -iname stock\.repo -exec rm -f {} \;
하지만 매우 조심하세요. /path/to/directory에서 재귀적으로 작동합니다. 영구적인 손상을 초래할 수 있는 프로덕션 시스템에서 명령을 실행하기 전에 maxlength 옵션 사용을 고려하고 명령에 좀 더 익숙해져야 합니다.
답변3
zsh
및 쉘을 사용하면 ksh93
glob별로 대소문자를 구분하지 않는 일치를 수행할 수 있습니다.
zsh
:set -o extendedglob # best in ~/.zshrc rm -- (#i)$filename
ksh93
:rm -- ~(i:"$filename")
그러나 일치하는 파일이 없으면
~(i:stock.repo)
리터럴은 으로 전달되고rm
, 파일이 있으면 삭제됩니다(zsh
위의 작업은 오류로 인해 실패하며rm
이 경우 전혀 호출되지 않습니다).N
그러나 태그 외에도 태그를 설정할 수도 있습니다i
.rm -- ~(Ni:"$filename")
그런 다음 불일치하는 경우
rm
빈 인수로 호출됩니다(아마도 따옴표로 인해 발생하는 오류일 수 있습니다. 전달을 의미하기 때문입니다).아니요그렇다면 전혀 논쟁이 없습니다). 그러면 오류가 발생rm: cannot remove '': No such file or directory
하지만 적어도 잘못된 파일을 삭제하지는 않습니다.
답변4
저는 아래 방법을 이용해서 해봤습니다. 위에 제공된 답변은 매우 좋습니다. 아래는 내 시도입니다
ls -ltr | awk '{print $9}' | sed -n '/^STOCK.Repo$/Ip' |awk '{print "rm" " " $1}'| sh