我想写一个脚本,将清理备份目录从旧文件,只留下最新的N在那里。我也想在不使用ls的情况下这样做。
昨天我用下面的代码结束了:
counter=0
while IFS=/ read -rd '' time file; do
((counter++ < ${KEEP_NUMBER:?})) && continue
rm -f "$file"
done < <(find . -maxdepth 1 -type f -printf "%T@/%p\0" | sort -znr)然而,这根本不是可移植的,因为已经使用了find -printf,留下了所有没有GNU扩展的盒子。
有没有更好的方法来完成这样的任务?
发布于 2011-02-04 11:16:11
它可以相对容易地完成,只要你有
bash )的shell test (可比较2个文件的时间) 下面是我的尝试(它可能不能处理文件名中的空格,但这可以很容易地解决
#!/bin/bash
declare -a files
for file in *
do
files[${#files[@]}]=$file
done
# Bubble sort the files from newest to oldest
declare -i i j count=${#files[@]}
while true
do
declare -i sorted=1
for ((i=1;i<count;i++))
do
let j=i-1
if [ ${files[$j]} -ot ${files[$i]} ]
then
sorted=0
f=${files[$j]}
files[$j]=${files[$i]}
files[$i]=$f
fi
done
[ $sorted -eq 1 ] && break
done
# Delete everything except the first 5 files
for ((i=5;i<count;i++))
do
rm "${files[$i]}"
done发布于 2011-02-04 16:34:35
好的,这是find的POSIX -newer的主要功能。它-通过一些次要的编码-可以用来根据文件的修改时间来分隔文件。我会做一些事情,比如获取第一个文件,找到较新的文件。我有两套--新的和旧的。如果有比N更新的文件,我只对较新的集合重复该过程,否则我会记住较新的集合,从N中减去这个数字,然后对较旧的集合重复该过程。
或者,您可以使用pax创建一个归档文件,然后使用-o listopt以您想要的格式提取修改时间,这样您就拥有了所有信息:)
发布于 2011-03-20 21:57:39
http://www.google.fr/search?q=zfs
否则..。
man rsnapshoot
否则..。
不要试图重新创建备份套件
否则..。
man find | grep -ctime man find | grep -delete
https://stackoverflow.com/questions/4888508
复制相似问题