Похоже, это решение работает:%X
становится%02X
Старый и не рабочий
perl -e 'for ($i=00;$i<6;$i++){@m[$i]=int(rand(256));} printf "00:16:3E:%X:%X:%X\n",@m;'
новый и рабочий
perl -e 'for ($i=00;$i<6;$i++){@m[$i]=int(rand(256));} printf "00:16:3E:%02X:%02X:%02X\n",@m;'
Это может быть упрощением, но если все интересующие вас файлы находятся в одном каталоге и ни в одном из этих файлов нет пробелов в именах, вы можете сделать что-то вроде:
#!/bin/bash
destination="/wherever"
for i in *; do
if echo "${i}" | grep -q -E '^google.{16}\.html$'; then
cp "${i}" "${destination}"
fi
done
Здесь я использую grep
для сопоставления регулярных выражений :Имена файлов, которые начинаются(^
)с google
, за которыми следуют любые 16 символов (.{16}
), за которыми следует .html
в конце($
)имени.
Bash также поддерживает сопоставление регулярных выражений, поэтому вы также можете сделать это с помощью:
#!/bin/bash
destination="/wherever"
for i in *; do
if [[ "${i}" =~ ^google.{16}\.html$ ]]; then
cp "${i}" "${destination}"
fi
done
Регулярное выражение здесь такое же, как в предыдущем примере.