Как сопоставить x символов имени файла с cp?

Похоже, это решение работает:%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;'
-2
26.03.2020, 08:37
1 ответ

Это может быть упрощением, но если все интересующие вас файлы находятся в одном каталоге и ни в одном из этих файлов нет пробелов в именах, вы можете сделать что-то вроде:

#!/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

Регулярное выражение здесь такое же, как в предыдущем примере.

1
19.03.2021, 02:32

Теги

Похожие вопросы