У вас есть проблема в вашем скрипте на prevhour=$((vhour - 1))
, таким образом, текст 02
после того, как вы сделаете вычитание, будет 1
, а не 01
, и будет соответствовать нежелательным файлам, или даже ни одному, как 00 - 1
is -1
[edvin]$ vdate=$(TZ=bb24 date '+%Y%m%d')
[edvin]$ vhour=$(date '+%H')
[edvin]$ prevhour=$((vhour - 1))
[edvin]$ echo $vhour
03
[edvin]$ echo $prevhour
2
[edvin]$ prevhour=$(date -d '1 hour ago' '+%H')
[edvin]$ echo $prevhour
02
опция даты -d
недоступна в некоторых системах.
Я считаю, что при вашей попытке оболочка считается *
как частьпеременная prevhour
, поскольку вы не поместили ее в {}
, которая отделяет переменные от сорбируемого текста.
Это мое рабочее решение, основанное на вашей попытке:
#!/bin/ksh
r_host='server2'
r_user='edvin'
l_dir='./content'
r_dir='./Test_folder'
# this still not cover the case of midnight
# it put 00 to 23 but day have to be yesterday as well
##vdate=$(TZ=bb24 date '+%Y%m%d')
##vhour=$(date '+%H') # not used
##prevhour=$(date -d '1 hour ago' '+%H')
# vtime = YYYYmmdd_HH -1 H
vtime=$(TZ=bb24 date -d '1 hour ago' '+%Y%m%d_%H')
sftp ${r_user}@${r_host} << EOF
lcd ${l_dir}
cd ${r_dir}
get filename_${vtime}*.dat
bye
EOF
exit
Вывод:
[edvin]$ ./script.ksh
Connected to server2.
sftp> lcd ./content
sftp> cd ./Test_folder
sftp> get filename_20190415_02*.dat
Fetching /home/edvin/Test_folder/filename_20190415_020000.dat to filename_20190415_020000.dat
Fetching /home/edvin/Test_folder/filename_20190415_020100.dat to filename_20190415_020100.dat
Fetching /home/edvin/Test_folder/filename_20190415_020200.dat to filename_20190415_020200.dat
Fetching /home/edvin/Test_folder/filename_20190415_020300.dat to filename_20190415_020300.dat
Fetching /home/edvin/Test_folder/filename_20190415_020400.dat to filename_20190415_020400.dat
Fetching /home/edvin/Test_folder/filename_20190415_020500.dat to filename_20190415_020500.dat
Fetching /home/edvin/Test_folder/filename_20190415_020600.dat to filename_20190415_020600.dat
Fetching /home/edvin/Test_folder/filename_20190415_020700.dat to filename_20190415_020700.dat
Fetching /home/edvin/Test_folder/filename_20190415_020800.dat to filename_20190415_020800.dat
Fetching /home/edvin/Test_folder/filename_20190415_020900.dat to filename_20190415_020900.dat
Fetching /home/edvin/Test_folder/filename_20190415_021000.dat to filename_20190415_021000.dat
sftp> bye
В этом решении еще многое может пойти не так, как, например, если удаленный каталог не существует, недоступен, сценарий будет продолжаться с остальной частью команды, то же самое для локального каталога и дляфайлы также.Соединение также может запускать различные проблемы, которые вы можете решить.Вы хотите запланировать это так, чтобы решение могло избежать повторного появления скрипта, если он уже запущен.
scp
будет более предпочтительным способом сделать это, так как вы используете аутентификацию без пароля.
Если scp
по какой-то причине не подходит, с expect
это может быть обработано достаточно хорошо.