加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

通过Bash删除FreeBSD上除X最旧目录之外的所有目录(没有-printf,

发布时间:2020-12-15 16:59:50 所属栏目:安全 来源:网络整理
导读:stackoverflow上有几个不同的主题,用于查找/删除目录中最旧的目录/文件.我已经阅读了很多这些,并且看到了无数不同的方式,显然对其他系统上的某些人有用,但在我的特定情况下却不适合我. 限制是: 我在FreeBSD上(Freenas 9.3) 目录中有空格 不要使用ls(http://
stackoverflow上有几个不同的主题,用于查找/删除目录中最旧的目录/文件.我已经阅读了很多这些,并且看到了无数不同的方式,显然对其他系统上的某些人有用,但在我的特定情况下却不适合我.

限制是:

>我在FreeBSD上(Freenas 9.3)
>目录中有空格
>不要使用ls(http://mywiki.wooledge.org/ParsingLs)
>不能使用-printf的find(对我来说不存在)

我得到的最接近的是这样的(不完整):

find . -maxdepth 1 -d -name "Backup Set*" -print0 | xargs -0 stat -f "%m %N" | sort -r| awk 'NR>5'

这给了我要删除的目录,但是现在它们的前面有时间戳,我不确定如果我剥离并管道到rm我将回到我无法删除带有空格的目录的情况.

输出:

1450241540 ./Backup Set1
1450241538 ./Backup Set0

感谢您的帮助.

我看过的相关帖子:

https://superuser.com/questions/552600/how-can-i-find-the-oldest-file-in-a-directory-tree

Bash scripting: Deleting the oldest directory

Delete all but the most recent X files in bash

... | awk 'NR>5' | while read -r timestamp filename; do rm -rf "${filename}"; done

如果字段数多于read中指定的变量,则余数只是在最后一个指定变量中汇总.在我们的例子中,我们提取时间戳并使用其他所有内容作为文件名.我们迭代输出并为每个条目运行rm.

我建议用echo而不是rm进行测试运行,这样你就可以先验证结果.

或者,如果您更喜欢xargs -0版本:

... | awk 'NR>5' | while read -r timestamp filename; do printf "%s" "${filename}"; done | xargs -0 rm -rf

这也使用while读取但使用空字节分隔符打印每个文件名,这可以由xargs -0摄取.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读