Esta pergunta já tem uma resposta aqui:
Estou tentando escrever um script que copie um intervalo de arquivos. Os valores do intervalo são obtidos de dois arquivos diferentes usando os comandos grep, awk e cut.
Os nomes dos arquivos que eu quero copiar estão no intervalo da seguinte forma: MYSQLTEST_binlog.000001 para MYSQLTEST_binlog.001536.
Eu pego o primeiro intervalo da seguinte forma:
XX='head -30 /data/backup.sql | grep -w 'MYSQLTEST_binlog.*' | awk -F "." '{ print $2 }' | cut -f1 -d "'"'
O valor de XX é, digamos, 000055.
Eu pego o valor do intervalo em outra variável da seguinte forma:
YY=$(ls -l /data/mysql_data_dir/MYSQLTEST_binlog.* | grep -v index | tail -n 1 | awk -F "." '{ print $2 }')
YY é, digamos 001536. Esses valores estão sendo coletados corretamente.
Agora estou tentando passar esses valores para o comando cp da seguinte forma:
cp -ar /data/mysql_data_dir/MYSQLTEST_binlog.{$XX..$$YY} /data/binlog
E eu recebo o cp não pode stat /data/mysql_data_dir/MYSQLTEST_binlog.{000050..001536}.
Ele não considera esses valores como um intervalo.
A seguir, meu script:
#!/bin/bash
XX=$(head -30 /data/mysql_data_dir/backup.sql | grep -w 'MYSQLTEST_binlog.*' | awk -F "'" '{ print $2 }') ; echo $XX
YY=$(ls -l /data/mysql_data_dir/MYSQLTEST_binlog.* | grep -v index | tail -n 1 | awk -F "." '{ print $2 }') ; echo $YY
cp -ar /data/mysql_data_dir/MYSQLTEST_binlog.{$XX..$YY} /data/binlog