在 Linux 上删除 2010 年 1 月的目录

在 Linux 上删除 2010 年 1 月的目录

我想使用以下命令仅删除 2010 年 1 月的目录

ls -lh | awk '{print $6 " " $9}' | sed -n '/Jan/p' | awk '{print $2}' >>/tmp/file_list

上述命令将列出日期为 1 月份的所有目录,但我的列表中有 2010 年 1 月和 2011 年 1 月。

有人能帮助我使用 SED 命令列出截至 2010 年 1 月的目录吗?

答案1

您可以使用 grep 代替 awk/sed,也许像这样?

ls -lh | grep -o 'Jan [ 1-2][0-9]  2010 .*$' | awk '{print $4}' >> /tmp/file_list

您所遇到的问题是第一个 awk 没有包括年份,因此 2011(或 2009、2008 等)全部显示在发送给 sed 的列表中。

答案2

永远不要尝试解析输出ls以用于显示目的以外的任何目的——这是一个馊主意

虽然它使用 find 和 xargs 而不是 sed,但也许类似这样的方法可以工作。请注意,它尚未经过测试。

jan01="$(date -d '20100101 00:00' +%s)"
feb01="$(date -d '20100201 00:00' +%s)"

today="$(date -d '23:59:59' +%s)"

daysecs="$((24*60*60))" # 86400 

dayssincefeb01="$(((today - feb01) / daysecs ))"
dayssincejan01="$(((today - jan01 + 1) / daysecs ))"

find /path -type d -mtime +"$dayssincefeb01" -mtime -"$dayssincejan01" \
-print0 | xargs -0 rm -r

最后的 find 命令会查找早于 2010 年 2 月 1 日但早于 2010 年 1 月 1 日的目录,并使用'\0'空字符将它们安全地传输到 xargs。

相关内容