shell 怎么打印 5 天前到 30 天前

2015-05-07 19:35:53 +08:00
 holinhot

mytime=$(date -d -5day +"%Y%m%d")
shell怎么打印5天前到30天前
输出这样的
20150502
20150501
20150430
20150429
.....

2473 次点击
所在节点    Linux
9 条回复
extreme
2015-05-07 22:59:23 +08:00
使用Bash Shell的for循环:
for (( i = 5 ; i != 31 ; i = ((${i} + 1))))
do
date -d -${i}day +"%Y%m%d"
done
holinhot
2015-05-07 23:29:51 +08:00
@extreme 怎么把循环后的定义到变量
timeee=20150429
timeee=20150428
timeee=20150427

然后好删除文件。
rm -rf 20150429
rm -rf 20150428
rm -rf 20150427
Jaylee
2015-05-07 23:39:55 +08:00
@holinhot 已经告诉你答案了,还是要自己稍微动点脑筋的
extreme
2015-05-08 00:08:30 +08:00
@holinhot 替换下do到done之间的命令就行了。
没必要加入到另一个变量吧:
for (( i = 5 ; i != 31 ; i = ((${i} + 1))))
do
rm -rf $(date -d -${i}day +"%Y%m%d")
done
holinhot
2015-05-08 00:30:16 +08:00
@Jaylee 我是小学生 刚学
holinhot
2015-05-08 00:37:50 +08:00
@extreme 应该要加入另外变量。因为我从文本读取了变量
rm -rf servername1 /20150427

其中servername是从txt种读行取的。最终是
rm -rf servername1 /20150429
rm -rf servername2 /20150429
rm -rf servername3 /20150429
rm -rf servername4 /20150429


rm -rf servername1 /20150428
rm -rf servername2 /20150428
rm -rf servername3 /20150428
rm -rf servername4 /20150428

rm -rf servername1 /20150427
rm -rf servername2 /20150427
rm -rf servername3 /20150427
rm -rf servername4 /20150427
holinhot
2015-05-08 00:38:28 +08:00
@extreme

for (( i = 5 ; i != 31 ; i = ((${i} + 1))))
do
rm -rf $(date -d -${i}day +"%Y%m%d")
done 这个我开始想到了 试了好像不成功
holinhot
2015-05-08 00:41:01 +08:00
@extreme
cat server_list.txt | xargs -i rm -rf /backup/{}/日期变量
extreme
2015-05-08 13:15:47 +08:00
@holinhot
又不说清楚点,谁清楚你的具体需求呢?
还是用for循环:
unset NTD
for (( i = 5 ; i != 31 ; i = ((${i} + 1))))
do
NTD=${NTD}$(date -d -${i}day +"%Y%m%d"),
done
for server in $(cat server_list.txt)
do
eval rm -rf /路径/${server}/{$(echo ${NTD} | sed -r "s/,$//g")}
done

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/189285

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX