【问题标题】:Is there any way to output and log number of files deleted from shell script有什么方法可以输出和记录从 shell 脚本中删除的文件数
【发布时间】:2014-01-17 09:32:57
【问题描述】:

我有一个名为 somefile.sh 的 shell 脚本文件,它的代码如下所示,

somefile.sh

find /xxx/yyy/* -mtime +30 -exec rm {} \;
find /xxx/zzz/* -mtime +30 -exec rm {} \;
find /xxx/xyx/* -mtime +30 -exec rm {} \;
find /xxx/xzx/* -mtime +30 -exec rm {} \;

这每天都在 cron 中运行,

现在我想为此设置一个日志文件, 就像对于每个 shell 脚本,我想将我的每个命令结果输出到一个文件,然后,

谁能帮我解决这个问题。提前致谢。

【问题讨论】:

  • 应该是微不足道的,不是吗?执行 shell 命令而不是 rm 并记录您想要的任何内容。
  • 不,我只是放了 4 个命令,但实际上我有大约 10 个文件夹要删除不同的天数。我想将此文件添加到 cronjob 中,例如每天删除。所以我需要这样的文件并且需要单独的日志。

标签: linux shell unix command


【解决方案1】:

建立一个过期日期的文件夹列表。

cat folder.list

/xxx/yyy  30
/xxx/zzz  30
/xxx/xyx  7
/xxx/xzx  14

更新 somefile.sh

LOG=/var/tmp/LOG

while read folder day X
do
    echo "Working on folder ${folder} .."
    find ${folder}/* -mtime +${day} -type f |while read line
    do
        echo "removing $line ...."
        rm ${line}
    done
done <folder.list >> $LOG

更新了新请求(计算删除文件)

#!/usr/bin/bash

LOG=/var/tmp/LOG

while read folder day X
do
    echo "Working on folder ${folder} .."
    i=0
    find ${folder}/* -mtime +${day} -type f |while read line
    do
        echo "removing $line ...."
        rm ${line}
        ((i++))
    done
    echo "Totally deleted $i files in folder $folder"
done <folder.list >> $LOG

【讨论】:

  • 感谢您的回复。这对我来说真的非常非常有用,但是在这里我如何获取删除的文件数量?
  • 删除文件时,可以初始化计数,每次增加计数
  • 你在说这样的话,COUNTER=$((COUNTER+1)) ??
  • 非常感谢。并记录日期?我只想在 echo 中添加日期命令。对吗?
  • 如何提及要删除的模式,例如“find /var/tmp/log_update* -mtime +30 -exec rm {} \;”和“查找 /var/tmp/*.sql -mtime +30 -exec rm {} \;”
【解决方案2】:

让你的 find 打印它删除的内容

find /xxx/zzz/* -mtime +30 -print -exec rm {} \;

find /xxx/zzz/* -mtime +30 -exec echo Removing +30 days file {} \; -exec rm {} \;

接下来,您可以按照自己的方式过滤输出(wc -l 或 grep -c)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2021-12-25
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多