Linux или Unix найти: ярлык для соответствия частичного имени

Что я обычно печатаю:

find . -name "*pattern*"

что я хочу напечатать (например. mnemonic = "all"):

afind . -name "pattern"

или же

find . -aname "pattern"

Я просто думал, что может быть ярлык, как в стилеfind . -iname "blah"или жеrgrep instead of grep -r

Несмотря на то, что, как и в примере с grep, он сохраняет только пару символов, это сдвинутые символы, которые набрать не так просто, и, вероятно, это часто используемый поиск.

3 ответа

Решение

Вы должны были бы катиться самостоятельно. например:

$ afind () { find "$1" -name "*$2*"; }

$ afind . partial  
./dir/apartialmatch

Вы можете добавить определение в свой.profile или любой другой файл, чтобы он всегда был доступен.

То, что вы ищете, это своего рода функция-обертка для поиска.

Этот скрипт должен делать то, что вы ищете, и поддерживать все остальные функции поиска.

declare -A params
wild_next=false
for i in $(seq 1 $#); do
    if [[ ${!i} == "-aname" ]]; then
        params[$i]='-name'
        wild_next=true
    else
        if $wild_next; then
            params[$i]="'*${!i}*'"
        else
            params[$i]=${!i}
        fi
        wild_next=false
    fi
done

eval "find ${params[@]}"

Он просто заменяет любой экземпляр -aname вариант с -name и ставит звездочки вокруг своего аргумента.

Если это то, что вы делаете много, locate будет быстрее. Он основан на быстром поиске в Беркли и входит в пакет GNU "findutils". Обратите внимание, что он получает свои данные из базы данных, поэтому он является таким же текущим, как и последний запуск updatedb, который также находится в пакете "findutils".

Другие вопросы по тегам