删除除 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Ant 删除除最新的 2 个文件之外的所有文件

Linux Centos 删除除某(多)个文件之外的所有文件

删除除文件扩展名之外的所有内容[重复]

SQL Server:删除除最新的“n”个结果之外的所有结果

列出除linux之外的所有文件[重复]

TSQL - 每组删除除 1 之外的所有行