我正在阅读@dessert 的回答:https://askubuntu.com/a/990771/853133关于如何在 Ubuntu 中使用 cron 从目录中删除旧的备份文件夹。给出的命令是:
find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 | sort -z | head -zn-6 | xargs -0 echo rm -rf
然而,CentOs 7 不喜欢在 head 调用中使用 z 标志:
head: invalid option -- 'z'
CentOs7 有解决方法吗?
我看了一下:当我没有可用的“-z”选项时,如何执行与“head -z”等效的命令?我认为这个解释不适用于我的问题。如果我想删除早于 n 的备份,我不知道如何更改命令。
答案1
是的,在过去的几十年里,GNU 实用程序逐渐添加了对 NUL 分隔记录的支持。 GNUhead -z
是相对较新的(2015 年),而 GNUsort
已有-z
数十年(1996 年)甚至xargs
-0
更长时间(1990 年)。
在这里,你还可以这样做:
find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 |
sort -rz | sed -z 1,6d | xargs -r0 echo rm -rf
-z
GNU 的添加是sed
最近的(2012 年),但不像head
的那么新。
数十年来,GNU 文本实用程序一直能够处理其输入中的 NUL 字节,因此您始终可以执行以下操作:
find /BACKUPDIR/ -mindepth 1 -maxdepth 1 -type d -print0 |
tr '\0\n' '\n\0' |
sort -r | tail -n +7 |
tr '\0\n' '\n\0' |
xargs -r0 echo rm -rf
或者您可以随时安装zsh
并执行
echo rm -rf /BACKUPDIR/*(D/[1,-7])
(另请参阅它的n
glob 限定符以数字方式排序,因此 10 排序在 9 之后,而不是在 1 和 2 之间排序)。
(以上日期来自变更日志,包含这些更改的官方版本可能会晚一些)。