我想编写一个脚本来清理旧文件中的备份目录,只留下最新的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扩展的所有框。
有没有更好的方法来完成这项任务?
答案 0 :(得分:1)
只要你有
,就可以相对容易地完成bash
所有)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
答案 1 :(得分:0)
嗯,-newer
的主要POSIX find
。它 - 通过一些次要编码 - 可用于按修改时间分隔文件。我会做一些事情,比如拿第一个文件,找到更新的文件。我有两套 - 更新,更老。如果有比 N 更新的文件,我只重复较新设置的过程,否则我记得较新的设置,从N中减去这个数字并重复旧设置的过程。
或者您可以使用pax
创建存档,然后使用-o listopt
以您想要的格式提取修改时间,您可以获得所有信息:)
答案 2 :(得分:0)
http://www.google.fr/search?q=zfs
其他......
man rsnapshoot
其他......
停止尝试重新发明备份套件
其他......
男人找到| grep - -ctime 男人找到| grep - -delete