首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于从目录中删除除一个文件之外的所有文件的Bash命令

用于从目录中删除除一个文件之外的所有文件的Bash命令
EN

Stack Overflow用户
提问于 2011-02-13 23:28:22
回答 3查看 1.7K关注 0票数 0

我有一个备份文件夹,其中包含多个MySQL备份,这些备份的标准文件名是从创建备份时派生的:

代码语言:javascript
复制
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命令可以删除除最新备份之外的所有备份?

EN

回答 3

Stack Overflow用户

发布于 2011-02-13 23:32:53

代码语言:javascript
复制
ls | grep -v $(ls -t | head -1) | xargs rm

更好的:

代码语言:javascript
复制
ls -rt | tail -n +2 | xargs rm

针对疯狂的文件名(除换行符以外的所有文件名)的装甲,适用于偏执狂:

代码语言:javascript
复制
ls -rt | tail -n +2 | tr '\n' '\0' | xargs -0 rm
票数 3
EN

Stack Overflow用户

发布于 2011-02-13 23:55:28

代码语言:javascript
复制
#!/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

票数 3
EN

Stack Overflow用户

发布于 2011-02-13 23:54:49

如果您启用了extglob选项:

代码语言:javascript
复制
rm !(`ls -1 site-name-*.mysql | sort -r | head -1`)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4984980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档