가장 큰 문제는 내 디렉토리에 대문자 파일이 많다는 것입니다.(예: 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*"
}