Создайте маленький perlscript для сортировки аргументов, передаваемых оболочкой:
#!/usr/bin/perl -l -s
$re ||= qr/(\d+)/;
sub bynum {
($aa) = $a =~ $re;
($bb) = $b =~ $re;
return $aa <=> $bb;
}
map { print } sort bynum @ARGV;
Сохраните скрипт как sortargsbynum
и вызовите его как выражение оболочки:
for d in $(sortargsbynum conf*); do
cat $d/distance.txt >> /path/to/folder/d.txt
done
Вы можете передать специальное регулярное выражение для сопоставления, например, чтобы сопоставить только число в конце имени:
for d in $(sortargsbynum -re='(\d+)$' *conf*); do
echo $d
done
conf1
conf2
conf10
conf20
conf99
1stconf100
2ndconf100
conf101
conf200
conf201
Как предположил @dirkt, похоже, conntrack плохо работает с мостом. Таким образом, правила iptables, которые не требуют, похоже, работают на мосту, но не на NAT.
Проблема решилась, как только я настроил свой брандмауэр как брандмауэр уровня 3.
На случай, если кому-то будет интересно :Я долго искал в Интернете возможность использования прозрачного брандмауэра уровня 2 с NAT, но так и не получил прямого ответа.
веб-сайт ebtables предполагает, что это возможно:
bridge-nf code makes iptables see the bridged IP packets and enables transparent IP NAT.
Я так и не узнал, какая команда ebtables заставит его работать.