首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在unix shell脚本中删除旧文件的可靠方法

在unix shell脚本中删除旧文件的可靠方法
EN

Stack Overflow用户
提问于 2013-09-26 15:43:51
回答 2查看 3.4K关注 0票数 1

我正在尝试构建一个可靠的shell脚本,以使用find删除基于Xn of days的旧文件。然而,脚本似乎间歇性地工作。有更好的办法吗?我首先列出文件以确保捕获它们,然后使用-exec rm{}删除它们。

我执行脚本的方式如下:/home/scripts/rmfiles.sh /u05/backup/export/test dmp 1

代码语言:javascript
运行
复制
#!/usr/bin/ksh

if [ $# != 3 ]; then
   echo "Usage: rmfiles.sh <directory> <log|dmp|par> <numberofdays>" 2>&1
   exit 1
fi

# Declare variables
HOURDATE=`date '+%Y%m%d%H%M'`;
CLEANDIR=$1;
DELETELOG=/tmp/cleanup.log;

echo "Listing files to remove..." > $DELETELOG 2>&1
/usr/bin/find $CLEANDIR -name "*.$2" -mtime +$3 -exec ls -ltr {} \; > $DELETELOG 2>&1

echo "Removing files --> $HOURDATE" > $DELETELOG 2>&1
#/usr/bin/find $CLEANDIR -name "*.$2" -mtime +$3 -exec rm {} \; > $DELETELOG 2>&1

我的示例目录中显然有到今天为止超过一天的文件,但是find在以前的一些测试中并没有捡到它。

Thu Sep 26 08:54:57 PDT 2013

代码语言:javascript
运行
复制
total 161313630
-rw-------   1 oracle     dba        10737418240 Sep 24 14:17 testexp01.dmp
-rw-------   1 oracle     dba        10737418240 Sep 24 14:20 testexp02.dmp
-rw-------   1 oracle     dba        10737418240 Sep 24 14:30 testexp03.dmp
-rw-------   1 oracle     dba            508 Sep 24 15:41 EXPORT-20130924.log
-rw-------   1 oracle     dba            509 Sep 25 06:00 EXPORT-20130925.log
-rw-------   1 oracle     dba            508 Sep 26 08:30 EXPORT-20130926.log
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-26 16:11:34

除了几个小问题外,这个脚本总体上看起来不错。我的猜测是,您希望将-daystart添加到选项列表中,以便“从今天开始而不是24小时前”测量-mtime测试的基础。该选项只影响稍后出现在命令行中的测试。

如果您有going,那么尝试find -D tree,search,stat,rates看看正在发生什么。

一些评论:

  • 始终引用变量以确保奇数空间不会产生影响:/usr/bin/find "$CLEANDIR" -name "*.$2" -mtime "+$3" ...。同样适用于CLEANDIR="$1"
  • 不要用;终止行,这是不好的风格。
  • 您可以将-exec ls -ltr {} \;替换为-ls-print。这样,您就不必运行find命令两次。
  • 您应该引用{},因为有些shell将它们解释为特殊字符。
票数 2
EN

Stack Overflow用户

发布于 2013-09-26 16:04:10

  • man find
  • -mtime提到了-atime上的注释
  • “当查找出文件上次被访问的24小时前的多少次时,任何小数部分都会被忽略,因此要匹配-atime +1,至少必须在两天前访问一个文件。”因此,对于-mtime也是如此。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19032753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档