删除除 1 个最新文件之外的所有 bash [重复]
Posted
技术标签:
【中文标题】删除除 1 个最新文件之外的所有 bash [重复]【英文标题】:Delete all but 1 latest file bash [duplicate] 【发布时间】:2014-12-22 11:32:33 【问题描述】:我的目录包含以下文件:
dump_2014_12_21_1001.7z
dump_2014_12_21_1122.7z
dump_2014_12_21_1207.7z
dump_2014_12_21_1334.7z
文件数可能不同。
我需要编写 bash 脚本来删除除最新文件之外的所有文件?
【问题讨论】:
num=$(ls /tmp/ | wc -l) num=$((num-1)) (ls -lt /tmp/ | tail -n $num;ls) |排序|uniq -u|xargs rm 【参考方案1】:请不要使用您发布的num=$(ls /tmp/ | wc -l) num=$((num-1)) (ls -lt /tmp/ | tail -n $num;ls) | sort|uniq -u|xargs rm
。
您的文件名对全局非常友好,您无需再次对它们进行排序。 这是一个更好的解决方案:
unset oldfile
for file in *.7z; do
[[ $oldfile ]] && rm "$oldfile"
oldfile=$file
done
【讨论】:
或:shopt -s nullglob; files=( *.7z ); (( $#files[@]>1 )) && rm -- "$files[@]:1"
。前提是文件不多。以上是关于删除除 1 个最新文件之外的所有 bash [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Linux Centos 删除除某(多)个文件之外的所有文件