#!/bin/bash
now=$(date +"%d-%m-%Y")
year=$(date +"%Y")
echo $year
find /var/backup/backup-scripts -name '*$year*' -ctime +10 -exec rm {} \;
~
~
此脚本正在运行,没有错误,但没有删除10天的旧文件夹
请告知
感谢您的期待
答案 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
一些差异:
-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)