대소문자를 구분하지 않고 검색하기 위해 "find"를 사용하는 방법("*" 와일드카드 문자 사용)

대소문자를 구분하지 않고 검색하기 위해 "find"를 사용하는 방법("*" 와일드카드 문자 사용)

가장 큰 문제는 내 디렉토리에 대문자 파일이 많다는 것입니다.(예: Foobar.txt,,, FooBar.txt심지어 FOOBAR.txt). 정확하게 입력하여 파일을 찾는 것이 혼란스럽습니다.(정확한 파일 이름을 알고 있다면 왜find? ). 그래서 저는 그냥 입력 foobar하고 세 개의 파일이 모두 결과에 나타나기를 원합니다.

또한 *문자열의 양쪽을 사용하여 파일 이름 앞뒤의 문자 수를 일치시킵니다.

이 작업을 수행하는 별칭이나 함수를 원합니다.

답변1

그렇다면 올바른 방법은

find -iname \*foobar\*

여기서는 -iname대소문자를 구분하지 않는 검색을 위한 것이지만 와일드카드를 \이스케이프하기 위한 것입니다 *.

이 경우에는 함수가 약간 불필요해 보이지만 작성하기 쉽습니다.

function lazyfind ()
{
    find -iname \*$1\*
}

답변2

운영 체제에 GNU find -iname 옵션이 없는 경우 동일한 목적을 달성할 수 있는 이식 가능한 방법은 다음과 같습니다.

cifind()
{
  pattern=""
  l=${#1}
  i=1
  while [ $i -le $l ] ; do
    lc=$(echo "$1" | cut -c $i-$i | tr '[A-Z]' '[a-z]')
    uc=$(echo "$lc" | tr '[a-z]' '[A-Z]')
    if [ ."$lc" != ."$uc" ] ; then
      pattern="${pattern}[$lc$uc]"
    else
      pattern="${pattern}$lc"
    fi
    i=$((i + 1))
  done
  find . -name "*$pattern*"
}

관련 정보