【问题标题】:bash renaming counter loopbash重命名计数器循环
【发布时间】:2014-05-29 14:45:18
【问题描述】:

如何循环执行此操作?

我需要在 cron-tab 中放置一个小脚本,它将获取实际日志并将它们放入 log-1 文件中。将 log-1 文件重命名为 log-2 文件...基本上我需要有一周前的日志文件,按 log-1 到 log-7 日志排序,其中 log-7 是 7 天前的日志,并且每天更新。

基本上我在一个小循环中需要这个并且语法有问题:

mv log-6 log-7
mv log-5 log-6
mv log-4 log-5
mv log-3 log-4
mv log-2 log-3
mv log-1 log-2
mv logactual log-1

【问题讨论】:

  • 向我们展示您的代码,以便我们识别语法问题。
  • 顺便说一句,logrotate 做了你想做的事。

标签: bash loops rename counter


【解决方案1】:

感谢您的回答,由于缺乏努力,我有:

COUNTER=7
until [  $COUNTER -gt 0 ]; do
mv log-($COUNTER -1) log-$COUNTER
let COUNTER-=1
done

不知道如何处理该日志-($COUNTER -1) 并且在谷歌搜索时遇到了麻烦

【讨论】:

    【解决方案2】:

    虽然我同意您的问题表明有些努力不足,但我无法抗拒挑战。 ;)

    for file in log-*
    do
        lognr=$(echo $file | sed "s/log-\(\d*\)/\1/")
        mv "$file" "log-$(expr $lognr + 1)"
    done
    mv logactual log-1
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      for ((i=7; i>=2; i--)); do mv "log-$((i-1))" "log-$i"; done; mv logactual log-1
      mv log-6 log-7
      mv log-5 log-6
      mv log-4 log-5
      mv log-3 log-4
      mv log-2 log-3
      mv log-1 log-2
      mv logactual log-1
      

      【讨论】:

      • 一如既往的快,但也许让 OP 先表现出一些努力...... :-)
      • 你遇到了什么语法问题?你能粘贴实际的错误吗?
      猜你喜欢
      • 2021-12-01
      • 2012-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      相关资源
      最近更新 更多