在linux中删除10天的旧文件夹

时间:2016-06-30 20:16:30

标签: linux bash shell

#!/bin/bash
now=$(date +"%d-%m-%Y")
year=$(date +"%Y")
echo $year
find  /var/backup/backup-scripts -name '*$year*' -ctime +10 -exec rm {} \;
~
~

此脚本正在运行,没有错误,但没有删除10天的旧文件夹

请告知

感谢您的期待

2 个答案:

答案 0 :(得分:1)

你是单引一个变量,它不能被shell扩展。尝试

find  /var/backup/backup-scripts -name "*$year*" -ctime +10 -exec rm {} \;

IHTH

答案 1 :(得分:1)

@ shellter的回答是对您的方法的更直接的映射,但是我的编码方式如下:

find  /var/backup/backup-scripts -name "*$(date +%Y)*" -mtime +10 -type f \
  -print0 |xargs -0 rm -v

一些差异:

  • 它是一个单行(虽然如果你想要一个cron作业,制作剧本)
  • -mtime("已修改")替换-ctime("已更改"),因为有时访问权限是更改
  • 我将结果限制为文件
  • 我将输出传递给xargs(以间隔文件名安全的方式)以分发任务

xargs很有用,因为它不会被太多文件所淹没(你只能向命令行程序发送这么多参数)。它运行得稍快,因为它将并行运行多个实例。 (如果它没有运行多个实例,则不会有任何加速,但在这种情况下,它可能不会花费太长时间。)

此处使用管道的一个主要原因是您可以进一步编辑输出。让我们说你想保留1月份的任何东西:

find /var/backup/backup-scripts -name "*$(date +%Y)*" -mtime +10 -type f \
  |egrep -v "$(date +%Y)-?01" |xargs -d "\n" rm -v

egrep -v只会显示与给定正则表达式匹配的行,因此不会被删除。

这使用\n作为分隔符,而不是\0(null),它会跳过名称中包含换行符的文件(不要这样做!),否则它会被排除在外点击file20150101.txt和file2015-01-01.txt(注意我的扩展posix正则表达式中的问号; further explanation at regex101