![대소문자를 구분하지 않고 검색하기 위해 "find"를 사용하는 방법("*" 와일드카드 문자 사용)](https://linux55.com/image/24973/%EB%8C%80%EC%86%8C%EB%AC%B8%EC%9E%90%EB%A5%BC%20%EA%B5%AC%EB%B6%84%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B3%A0%20%EA%B2%80%EC%83%89%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%22find%22%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95(%22*%22%20%EC%99%80%EC%9D%BC%EB%93%9C%EC%B9%B4%EB%93%9C%20%EB%AC%B8%EC%9E%90%20%EC%82%AC%EC%9A%A9).png)
가장 큰 문제는 내 디렉토리에 대문자 파일이 많다는 것입니다.(예: 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*"
}