我在shell脚本中尝试代码。当我试图将代码从批处理脚本转换为shell脚本时,我收到了一个错误。
批量文件代码
:: Create a file with all latest snapshots
FOR /F "tokens=5" %%a in (' ec2-describe-snapshots ^|find "SNAPSHOT" ^|sort /+64') do set "var=%%a"
set "latestdate=%var:~0,10%"
call ec2-describe-snapshots |find "SNAPSHOT"|sort /+64 |find "%latestdate%">"%EC2_HOME%\Working\SnapshotsLatest_%date-today%.txt"
SHELL SCRIPT中的代码
#Create a file with all latest snapshots
FOR snapshot_date in $(' ec2-describe-snapshots | grep -i "SNAPSHOT" |sort /+64') do set "var=$snapshot_date"
set "latestdate=$var:~0,10"
ec2-describe-snapshots |grep -i "SNAPSHOT" |sort /+64 | grep "$latestdate">"$EC2_HOME%/SnapshotsLatest_$today_date"
我想根据日期对快照进行排序,并将最新日期中创建的快照保存到文件中。
ece-describe-snapshots的示例输出:
SNAPSHOT snap-5e20 vol-f660 completed 2013-12-10T08:00:30+0000 100% 109030037527 10 2013-12-10: Daily Backup for i-2111 (VolID:vol-f9a0 InstID:i-2601)
它将包含这样的记录
我收到了这段代码:
latestdate=$(ec2-describe-snapshots | grep ^SNAPSHOT | sort -k 5 | awk '{print $5}')
ec2-describe-snapshots | grep SNAPSHOT.*$latestdate | > "$EC2_HOME/SnapshotsLatest_$today_date"
但收到此错误:
grep: 2013-12-10T09:55:34+0000: No such file or directory
grep: 2013-12-11T04:16:49+0000: No such file or directory
grep: 2013-12-11T04:17:57+0000: No such file or directory
我在亚马逊上制作了一些快照,我想找到一个日期制作的最新快照,然后想把它们存储在一个文件中。比如日期2013-12-10在此日期制作的快照应存储在文件中。 snapshotslatest文件的内容应为
SNAPSHOT snap-c17f3 vol-f69a0 completed 2013-12-04T09:24:50+0000 100% 109030037527 10 2013-12-04: Daily Backup for Sanjay_Test_Machine (VolID:vol-f66409a0 InstID:i-26048111)
SNAPSHOT snap-c7d617f9 vol-3d335f6b completed 2013-12-04T09:24:54+0000 100% 109030037527 10 2013-12-04: Daily Backup for sacht_VPC (VolID:vol-3db InstID:i-ed6)
请注意,如果在2013-12-10, 2013-12-11, 2013-12-12
上创建了快照。这意味着latest_date应为2013-12-12
,并且2013-12-12
上创建的所有snaphshot都应保存在文件中。
任何建议或领导都表示赞赏。
答案 0 :(得分:1)
批处理脚本和您发布的shell脚本都不是一个好的起点,所以让我们从头开始。对不起,这个评论太大了。
你want to find the latest snapshots made on a date and then want to store them in a file
。
这是什么意思?
快照文件的名称或内容是否有时间戳?
如果不是 - UNIX不存储文件创建时间戳,那么最后修改的时间戳是否足够?
您真的想将所有快照文件连接成一个单个文件,还是想创建一个包含快照文件名列表的文件?
发布一些示例输入(例如,一些快照文件名和内容,如果存储时间戳的位置)和给定输入的预期输出。
更新您的问题以解决上述所有问题,请勿尝试回复评论。
答案 1 :(得分:0)
小问题,重定向输出时不需要管道,所以要保存的行应
ec2-describe-snapshots | grep SNAPSHOT.*$latestdate > "$EC2_HOME/SnapshotsLatest_$today_date"
现在这里的主要问题是grep搞砸了。我没有使用亚马逊快照,但从您的示例描述判断,您应该做类似
的事情latestdate=$(ec2-describe-snapshots | grep -oP "\d+-\d+-\d+" | sort -r | head -1)
这将从文件中获取包含dddd-dd-dd格式的所有日期(我假设每个快照行中的两个日期始终匹配),按相反的顺序排序(最新的第一个)并取头这是最新的日期,存储在$ latestdate。
然后存储具有给定日期的所有快照,例如
ec2-describe-snapshots | grep -oP "SNAPSHOT(.*?)$lastdateT(.*?)\)" > "$EC2_HOME/SnapshotsLatest_$today_date"
这将使所有文本以SNAPSHOT开头,包含给定日期,并以结束“)”结束并保存。注意,如果“)”可以出现在其他地方,你可能不得不乱用它。