我的系统(ubuntu)中有一个文件夹,它使用wget
.文件名采用以下格式:A156.0.1.x、A156.0.y、A156.0.z、A156.0.a、A156.0.b。所有文件都是在我办公室的某个时间创建的,并且都具有相同的时间和日期。不允许 Rsync 和任何其他与办公室的连接。
我每天同步 4 次,并且没有关于创建文件的频率的模式。文件夹可能几周没有变化,也可能一天变化 10 次。新文件创建后,其名称将类似于 A156.1.[a,b,x,y,z]。每个文件都很大(~500MB)。
因此,我的系统中将不再有一组以上的文件 (5),总共有 10 个文件×500MB = 5GB。
是否有任何简单的脚本可以由 cron 运行来频繁检查文件夹并删除旧文件?所以我最终只会得到最新的 5 套。我可以运行诸如删除早于 x 天的文件之类的操作,但我们永远不确定何时会创建下一组文件。
答案1
您可以使用find
管道sort
进入列出按日期排序的文件,然后cut
在输出上使用生成文件列表,然后使用rm
删除除最新 5 个文件之外的所有文件。定期运行此操作应该会得到您正在寻找的结果。
我不知道现有的脚本,但这应该是相当简单的实现。
答案2
答案3
以下脚本将显示目录中“新文件”和“旧文件”的列表。 “新文件”是指在上次运行脚本之后已修改的文件,“旧文件”是指自上次运行脚本以来尚未修改的文件。
该脚本将输出写入date
“时间戳文件”,并在下次运行中使用该文件来确定哪些文件已更改。第一次运行时,不会产生任何输出。
该脚本应该手动运行,并且在编写时它只会给您一个机会探测特定目录中的哪些文件已被修改。
#!/bin/sh
topdir=$HOME # change this to point to the top dir where your files are
stamp="$topdir/timestamp"
if [ -f "$stamp" ]; then
echo 'New files:'
find "$topdir" -type f ! -name timestamp -newer "$stamp"
echo 'Old files:'
find "$topdir" -type f ! -name timestamp ! -newer "$stamp"
fi
date >"$stamp"
这可以修改为
- 提示用户删除旧文件,
- 仅检测与特定模式匹配的文件(使用
-name 'pattern'
,例如-name 'A156.1.[abxyz]'
), - 查看inode更改时间(“ctime”)而不是修改时间(使用
-cnewer
而不是-newer
如果您find
支持它), - ETC。