EDIT:
Нашел возможное решение, см. Ниже, но мне также нужна помощь, чтобы сделать его быстрее.
Я хочу покопаться в папке, содержащей папки, и скопировать каждую папку, имя которой содержит несколько строк, но я довольно застрял.
На данный момент структура, с которой я пришел:
#!/opt/bin/sh
EXCLUSIVECOUNTRIES="it,ch"
ONLYFROMCOUNTRIES=$(echo $EXCLUSIVECOUNTRIES | tr "," "\n")
FORCEPROTOCOL= # can be tcp udp or empty, that catch both
if [ $(echo "$FORCEPROTOCOL" | tr '[:upper:]' '[:lower:]') == "tcp" ]; then # tcp protocol
PROTOCOL="tcp"
elif [ $(echo "$FORCEPROTOCOL" | tr '[:upper:]' '[:lower:]') == "udp" ]; then
PROTOCOL="udp"
else
PROTOCOL="\w"
fi
for dirz in $(find /opt/serverconfigs/ -type d | grep -Ei $PROTOCOL); do
if [ ! -z $ONLYFROMCOUNTRIES ]; then # exclusive contry present, copy only what I need
echo "cp "$dirz" to
else # no exclusive contry, so copy all
for country in $ONLYFROMCOUNTRIES; do # for each contry
if [ $(echo $(basename "$dirz") | sed -En 's/^([a-z\-]+).*/\1/p') == "$country" ]; then
echo "$dirz"
fi
done
fi
done
Но когда я запускаю его, я получаю
sh: ch: unknown operand
cp /opt/serverconfigs/de0515udp to
sh: ch: unknown operand
cp /opt/serverconfigs/de0119udp to
sh: ch: unknown operand
cp /opt/serverconfigs/nl-uk0002tcp to
sh: ch: unknown operand
cp /opt/serverconfigs/us2062udp to
sh: ch: unknown operand
cp /opt/serverconfigs/us3415udp to
sh: ch: unknown operand
Моя структура папок:
/opt/serverconfigs/br0031tcp
/opt/serverconfigs/be0097udp
/opt/serverconfigs/uk1088tcp
/opt/serverconfigs/us3270udp
/opt/serverconfigs/ca0313tcp
/opt/serverconfigs/tw-hk0003tcp
/opt/serverconfigs/ro0036tcp
/opt/serverconfigs/uk1004udp
/opt/serverconfigs/us3242tcp
/opt/serverconfigs/uk1174tcp
/opt/serverconfigs/nl0294udp
/opt/serverconfigs/ro0034tcp
/opt/serverconfigs/dk0120tcp
/opt/serverconfigs/us3129tcp
/opt/serverconfigs/us2491tcp
/opt/serverconfigs/ca0075tcp
/opt/serverconfigs/uk1009udp
/opt/serverconfigs/us3188tcp
/opt/serverconfigs/it0081tcp
/opt/serverconfigs/ca0378udp
/opt/serverconfigs/au0216udp
/opt/serverconfigs/us2283tcp
/opt/serverconfigs/us3293tcp
Первая проблема заключается в том, что кажется, что она работает наизнанку, и я не понимаю, почему, а вторая проблема - неизвестный операнд, может быть, связаны?
Я немного искал неизвестный операнд и, похоже, проблема с [] и $ (), но каждый раз, когда я пытаюсь заставить его работать, результат один и тот же
Что я делаю не так?
Я ожидаю найти всю папку, имя которой содержит EXCLUSIVECOUNTRIES var в сочетании с протоколом, и скопировать папку в другую позицию
Есть идея получше?