linux shell脚本的循环下载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux shell脚本的循环下载相关的知识,希望对你有一定的参考价值。

linux shell脚本的循环下载:
两个日期:起始日期为startDate,结束日期为endDate,格式都是YYYYMMDD,
要下载的文件名字为File_YYYYMMDD.csv,但并不是每个日期都有这个文件。
我想用ftp循环下载存在的文件,以下为ftp代码,该怎样把循环文件名加进去呢?

lftp username:password@10.11.12.13 <<EOF
lcd /ftp_folder
get File_$fileDate.csv -o File_$fileDate.csv
close
bye
EOF

#!/bin/bash
#usage: getfile FirstDay LastDay
curday=$2
firstday=$1
 
while [ $firstday -le $curday ]
do
echo $curday
 
lftp username:password@10.11.12.13 <<EOF
lcd /ftp_folder
binary
get File_$curday.csv -o File_$curday.csv
close
bye
EOF
 
curday=`date -d "$curday 1 day ago" +%Y%m%d`
done

 直接日期加1的根本没考虑日期跨月的情况

追问

请问您$1、$2分别代表 $startDate和$endDate 吗,还有 这个循环能加个限制吗 就是取到一个文件就停止。

追答

是的

$1是脚本的第一个参数,就是开始日期
$2是脚本的第二个参数,就是结束日期
可以加限制,特定日期可以作为第三个参数传进去,在循环中进行判断

追问

麻烦指导一下限制该则么加呗,我用您给的方法写,因为firstday日期的文件不存在,所以控制台一直重复提示文件不存在这句话,不会去寻找第二天的文件,我也试过firstday文件存在的情况,在这种情况下,会一直重复下载firstday的文件,同样不会去找第二天的文件。

追答

这个不可能啊,中间一个文件不存在没关系,会跳到下一个的
echo $curday 这条语句的输出,能看出来日期的变化
并且我是从最后一天倒着下载的,最后才是FirstDay文件
你在while循环echo $curday下面加个read 语句,这样可以暂停一下,看清楚输出,回车即可继续

追问

多谢,由于我自己的问题,把下面的加一天注释掉了。

追答

不客气

参考技术A while true;do
filename=`date +'%Y%m%d'`.csv
ftp username:password@10.11.12.13 <<EOF
cd /ftp_folder
get filename
close
bye
EOF
sleep 151200
done

追问

要在起始日期和结束日期之间循环得到文件名

追答startDate="20140528"
endDate="20140529"
start=`date -d "$startDate" +%s`
end=`date -d "$endDate" +%s`
for((i=start;i<=end;i++))
do
filename=File_`date -d @$i "+%Y%m%d"`.csv
#do test ftp
done

追问

谢谢 我试试

追答startDate="20140528"
endDate="20140530"
start=`date -d $startDate +%s`
end=`date -d $endDate +%s`
echo $start
echo $end
for((i=start;i<=end;i+=86400))
do
filename=File_`date -d @$i "+%Y%m%d"`.csv
#echo $filename
ftp username:password@10.11.12.13 <<EOF
cd /ftp_folder
get $filename
close
bye
EOF
if [ -f $filename ]
then
break
fi
done

 

参考技术B wget -b -m -nH -P /test -o log.txt ftp://user:pass@192.168.0.1/test追问

请认真回答,不要骗分。

追答

请认真理解,不要瞎说

追问

怎么也看不出来你写的那句有和循环有关的

追答

wget可以同步ftp下/test目录里的所有文件到本地/test

追问

那循环文件名来取到存在的文件呢

追答

会全部取下来的,得根据实际情况启动同步

参考技术C 最简单的就用CRON实现。追问

我问的是循环的问题啊

Linux系统shell脚本for循环实战之目录权限

Linux系统shell脚本for循环实战之目录权限

一、脚本要求

1.要求输入任意目录:
若目录不在,输出该目录不存在
若目录存在,输出该目录下的文件或目录,且列出其权限

二、编写脚本

[root@192 scripts]# cat ./found_file.sh 
#!/bin/bash
########################################
#Author:jeven
#time:Sun 15 May 2022 09:26:22 PM CST
#filename:found_file.sh
#Script description:
########################################
read -p "please input a dir :" dir
if [ "$dir" == "" -o ! -d "$dir" ];then
	echo "the $dir is not exist!"
	exit 1
	fi
FILE=$( ls  "$dir")
for filename in $FILE
do
	perm=""
	test -r "$dir/$filename" && perm="$perm readable"
	test -w "$dir/$filename" && perm="$perm writable"
	test -x "$dir/$filename" && perm="$perm executable"
	echo "the file $dir /$filename 's permission is $perm "
done

三、执行脚本

[root@192 scripts]# ./found_file.sh 
please input a dir :/data/mysql
the file /data/mysql /file0 's permission is  readable writable 
the file /data/mysql /file1 's permission is  readable writable 
the file /data/mysql /file10 's permission is  readable writable 
the file /data/mysql /file2 's permission is  readable writable 
the file /data/mysql /file3 's permission is  readable writable 
the file /data/mysql /file4 's permission is  readable writable 
the file /data/mysql /file5 's permission is  readable writable 
the file /data/mysql /file6 's permission is  readable writable 
the file /data/mysql /file7 's permission is  readable writable 
the file /data/mysql /file8 's permission is  readable writable 
the file /data/mysql /file9 's permission is  readable writable 

以上是关于linux shell脚本的循环下载的主要内容,如果未能解决你的问题,请参考以下文章

linux远程登陆的shell脚本for循环无结果

shell脚本while用法

Linux系统shell脚本基础之while循环

Linux shell脚本进阶使用

Linux系统shell脚本之while循环实践1

Linux python3安装/shell脚本/if/循环/函数