소문자/대문자가 포함될 수 있는 파일을 삭제하는 방법

소문자/대문자가 포함될 수 있는 파일을 삭제하는 방법

존재할 수 있는 파일을 삭제하는 방법소문자 대문자사례

예를 들어 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및 쉘을 사용하면 ksh93glob별로 대소문자를 구분하지 않는 일치를 수행할 수 있습니다.

  • 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

관련 정보