Устранение глюка с find

Преамбула

Оказалось, в моей функции create_list() копия был обнаружен малозаметный и посему дико поганый баг. А баг был с командой find. Например, если запустить ее в любом каталоге с параметрами

find /home/smallwolfie/openvpn/configs -maxdepth 1 -iname *.ovpn, то она найдет все файлы *.ovpn

Но вот если команду запустить в каталоге с файлами (/home/smallwolfie/openvpn/configs), то она упадет:

cd /home/smallwolfie/openvpn/configs
find /home/smallwolfie/openvpn/configs -maxdepth 1 -iname *.ovpn

Вывод:

find: paths must precede expression: riseup-nl.ovpn
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]

Решение

Заключить маску файла в кавычки:

find /home/smallwolfie/openvpn/configs -maxdepth 1 -iname "*.ovpn"

Вывод:

/home/smallwolfie/openvpn/configs/vpnbook-pl226-tcp80.ovpn
/home/smallwolfie/openvpn/configs/vpnbook-de4-tcp80.ovpn
/home/smallwolfie/openvpn/configs/vpnbook-us1-tcp80.ovpn
/home/smallwolfie/openvpn/configs/vpnbook-us2-tcp80.ovpn
/home/smallwolfie/openvpn/configs/vpnbook-ca222-tcp80.ovpn
/home/smallwolfie/openvpn/configs/vpnbook-ca198-tcp80.ovpn
/home/smallwolfie/openvpn/configs/vpnbook-fr1-tcp80.ovpn
/home/smallwolfie/openvpn/configs/riseup-ca.ovpn
/home/smallwolfie/openvpn/configs/riseup-nl.ovpn
/home/smallwolfie/openvpn/configs/riseup-us.ovpn
/home/smallwolfie/openvpn/configs/vpnbook-fr8-tcp80.ovpn

Обновленная функция целиком

Пример из файла скрипта для соединения с определенным VPN-сервером

create_list() #$1 - dir, $2 - file mask
{
    FOUNDLST=""
    echo "Find in $1"
    for FLE in $(find $1 -maxdepth 1 -iname "$2"|sort); do
	if [ -n "$FLE" ]; then
	    FOUNDLST="$FOUNDLST"`basename $FLE`"\n"
	fi
    done
}

Обновленный скрипт

На GitHub

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *