我有一个备份文件夹,其中包含多个MySQL备份,这些备份的标准文件名是从创建备份时派生的:
Jims-MBP-2:manual-1 jim$ ls -1
site-name-2011-02-12T19-04-13.mysql
site-name-2011-02-12T19-11-58.mysql
site-name-2011-02-12T19-22-50.mysql
site-name-2011-02-12T19-24-46.mysql
site-name-2011-02-13T14-30-42.mysql是否有一行bash命令可以删除除最新备份之外的所有备份?
发布于 2011-02-13 23:32:53
ls | grep -v $(ls -t | head -1) | xargs rm更好的:
ls -rt | tail -n +2 | xargs rm针对疯狂的文件名(除换行符以外的所有文件名)的装甲,适用于偏执狂:
ls -rt | tail -n +2 | tr '\n' '\0' | xargs -0 rm发布于 2011-02-13 23:55:28
#!/bin/bash
shopt -s extglob
files='sitename*.mysql'
newest=($files)
for f in $files
do
if [[ "$f" -nt "$newest" ]]
then
newest=$f
fi
done
echo rm !("$newest")你应该使用avoid parsing ls。
发布于 2011-02-13 23:54:49
如果您启用了extglob选项:
rm !(`ls -1 site-name-*.mysql | sort -r | head -1`)https://stackoverflow.com/questions/4984980
复制相似问题