创建以下脚本以仅保留最新的 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
最佳答案
ls -1t/var/mds_backup/archives
会显示没有路径的目录中的文件名,缺少路径,这就是rm不能删除文件的原因。 解析 ls 是不安全的。但是,使用 bash 内置函数无法按上次访问时间对文件进行排序,因为要获得上次修改,必须调用外部命令。我会改用 perl 命令。
一个快速修复方法是用 ls -1td/var/mds_backup/archives/*
, -d 替换
以避免列出目录(如果存在)。在执行 ls -1t/var/mds_backup/archives
rm
命令之前可以加上 echo
前缀,以避免删除不需要的文件。
编辑:要更正我的答案,可以使用 [[ $filea -nt $fileb ]]
测试通过在 bash 中实现快速排序的内置函数来完成。
例如
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}"
关于linux - 删除在脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48298276/