我目前正在研究 HP-UX,并且有一个每天早上运行的 cron 作业,它根据保留策略删除超过特定天数的文件。最近,我在删除文件的路径中添加了一个子目录,并希望对该子目录下的文件有不同的策略。
目前我的命令如下:
find /directory/backup -mtime +1 -name "FileName*.EXT" -exec rm {} \;
当此命令运行时,它会删除备份目录下的所有文件以及备份子目录中的任何匹配文件。我的意思是在备份目录中有另一个名为 backup_db 的目录。
pwd
/directory/backup/backup_db
我只想限制从备份目录中删除,而不是从子目录中删除。我怎样才能做到这一点?非常感谢任何帮助。
我尝试了man rm但是没有找到任何可以帮助我的东西。
你的问题不在于,
rm
而是在于find
. 使用该-maxdepth 0
选项将搜索限制在起始目录。如果
-maxdepth
您的版本不支持,您find
还可以使用-path
and排除目录-prune
:使用您的命令行,该
find
命令将生成一系列单独的rm
命令并执行它们。每个rm
命令将删除一个文件,指定一个完整的路径名。因此,rm
您需要限制的不是 ,而是find
.由于历史原因,执行此操作的语法可能有点棘手。你可以这样做:
这是限制到单个目录
find $DIR ! -path $DIR -prune <desired_conditions> [desired_action]
的 POSIX 兼容方式。find
但它仍会列出该特定目录的子目录的名称,除非您添加更多条件。使用
-type f
将限制find
尝试为rm
备份目录中的子目录生成命令,这只会创建无用的错误消息:要删除目录,您需要递归rm
orrmdir
,我知道这是您不想做的事情在这种情况下。-exec
如果有很多文件要删除,用加号替换命令规范末尾的分号会提高性能:不是rm
每个文件生成一个命令,而是生成尽可能少的命令,填充尽可能多的路径名参数在rm
命令行长度允许的情况下添加到每个命令上。这大大减少了对fork()
新工艺的需求。