我有一个备份文件夹,其中包含多个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命令会删除除最新备份之外的所有备份?
答案 0 :(得分:3)
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
答案 1 :(得分:3)
#!/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
。
答案 2 :(得分:1)
如果您启用了extglob
选项:
rm !(`ls -1 site-name-*.mysql | sort -r | head -1`)