V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
holinhot
V2EX  ›  Linux

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

  •  
  •   holinhot · 2015-05-07 19:35:53 +08:00 · 2555 次点击
    这是一个创建于 3523 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2015-05-08 13:15:47 +08:00
    extreme
        1
    extreme  
       2015-05-07 22:59:23 +08:00   ❤️ 1
    使用Bash Shell的for循环:
    for (( i = 5 ; i != 31 ; i = ((${i} + 1))))
    do
    date -d -${i}day +"%Y%m%d"
    done
    holinhot
        2
    holinhot  
    OP
       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
        3
    Jaylee  
       2015-05-07 23:39:55 +08:00
    @holinhot 已经告诉你答案了,还是要自己稍微动点脑筋的
    extreme
        4
    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
        5
    holinhot  
    OP
       2015-05-08 00:30:16 +08:00
    @Jaylee 我是小学生 刚学
    holinhot
        6
    holinhot  
    OP
       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
        7
    holinhot  
    OP
       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
        8
    holinhot  
    OP
       2015-05-08 00:41:01 +08:00
    @extreme
    cat server_list.txt | xargs -i rm -rf /backup/{}/日期变量
    extreme
        9
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   951 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:02 · PVG 06:02 · LAX 14:02 · JFK 17:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.