创建以下脚本以仅保留最新的3个文件,但rm命令不会删除文件。
#!/bin/sh
count=$(ls -1 /var/mds_backup/archives | wc -l)
echo "$count"
if [ "$count" -gt "3" ]; then
difference=`expr $count - 3`
rm -f $(ls -1t /var/mds_backup/archives | tail -n $difference)
else
echo "Nothing to Delete !!!"
fi
答案 0 :(得分:0)
ls -1t /var/mds_backup/archives
将在没有路径的目录中显示文件名,路径丢失,这就是rm无法删除文件的原因。
解析ls并不安全。但是,按上次访问时间对文件进行排序不能使用bash内置函数,因为要获得上次修改,必须调用外部命令。我会改用perl命令。快速解决方法是将ls -1t /var/mds_backup/archives
替换为ls -1td /var/mds_backup/archives/*
,-d
以避免列出目录(如果存在)。在执行rm
命令之前,可以使用echo
作为前缀,以避免删除不需要的文件。
编辑:为了纠正我的回答,可以使用内置函数在bash中使用[[ $filea -nt $fileb ]]
测试快速排序。
例如
files=( /var/mds_backup/archives/* )
qs() {
local l=() g=() p=$1
r=();shift||return
for i; do [[ $i -nt $p ]] && l+=("$i") || g+=("$i"); done
qs "${l[@]}"; l=("${r[@]}")
qs "${g[@]}"; g=("${r[@]}")
r=("${l[@]}" $p "${g[@]}")
}
qs "${files[@]}"
echo "${r[@]:3}"
rm "${r[@]:3}"