【问题标题】:Shell Script to write to a file upto a certain point and then keep overwriting the file用于写入文件到某个点然后继续覆盖文件的 Shell 脚本
【发布时间】:2016-05-23 12:55:59
【问题描述】:

我正在尝试编写一个 shell 脚本,它将另一个脚本的输出写入一个文件中,它会一直写入该文件直到某个点,然后它会覆盖该文件,以便文件大小保持在一个很好的范围内有界范围。

while true
do
    ./runscript.sh > test.txt
    sleep 1
done

我尝试使用无限循环和睡眠,以便它会继续覆盖该文件。

但是,它显示了不同的行为。直到点命令运行,文件大小不断增加。但是,当我停止命令时,文件大小会减小。

我怎样才能继续覆盖同一个文件并保持文件大小。

【问题讨论】:

  • 也许你可以分享一下 runscript.sh 的作用?这超出了我的想象。
  • 它只是不断生成连续的日志。
  • 所以 runscript.sh 本身就是无限循环?它可能被编程为这样吗?为什么不应该呢?
  • 是的,但是,在这种情况下,我怎么能暗示对文件大小的限制。有什么建议吗?
  • 您当前的脚本将在每个循环中覆盖旧的 test.txt。

标签: shell unix command overriding


【解决方案1】:

当文件大小超出边界时,使用truncate -s <size> <file> 缩小文件

【讨论】:

    【解决方案2】:

    我将使用下面的脚本

    #!/bin/sh
    
    Logfile=test.txt
    minimumsize=100000 # define the size you want
    actualsize=$(wc -c <"$Logfile")
    if [[ $actualsize -ge $minimumsize ]]; then
        rm -rf "$Logfile"
        sh ./runscript.sh >> test.txt  
    else
        #current_date_time="`date +%Y%m%d%H%M%S`"; #add this to runscript.sh to track when it was written
        #echo "********Added at :$current_date_time ********" #add this to runscript.sh to track when it was written
        sh ./runscript.sh >> test.txt
    fi
    

    【讨论】:

    • 我将最小尺寸更改为 1000。但是,它仍在生成大小为 23839 May 24 11:24 test.log 的文件,一旦我停止脚本,文件大小就会减小。一旦达到最小尺寸并删除旧文件,我该如何修改它以生成新文件。
    • @shubhamdeodia 我理解这个问题,如果单次执行 runscript.sh 导致文件大小超过 1000,那么我们不会删除文件。它只会检查下一次脚本执行的时间
    • @shubhamdeodia 我能想到的另一种方法是编写代码以递归方式监视 runscript.sh 中的文件大小,如果达到限制,则清理文件并继续执行脚本。
    • 但这会导致一些数据丢失。不会吗?
    • 可以分享一下方法吗
    【解决方案3】:

    我可以尝试使用旧文件生成新文件的选项 已满。 … 怎样才能使 生成新文件并写入文件的脚本。

    下面的脚本,我们称之为chop.sh,就是这样做的;您可以通过将输出提供给它来使用它,指定所需的文件大小和名称作为参数,例如。 G。 ./runscript.sh|chop.sh 999999 test.txt.

    File=${2?usage: $0 Size File}
    Size=$1
    while
        set -- `ls -l "$File" 2>/dev/null`  # 5th column is file size
        [ "$5" -lt "$Size" ] || mv "$File" "$File"-old
        read -r && echo "$REPLY" >>"$File"
    do  :
    done
    

    然后将旧(完整)文件命名为test.txt-old

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 2019-02-05
      • 2014-09-03
      • 2015-01-30
      • 2018-12-31
      • 1970-01-01
      相关资源
      最近更新 更多