0

知道如何在使用 linux 命令的哪个月到哪个月之间删除我的旧文件吗?

例如我想要做的是:

rm oldfile.txt april until may 2012

知道如何解决我的问题吗?

谢谢

4

3 回答 3

2

一个三步过程,使用find

touch -d '2012-04-01 00:00:00' STARTING
touch -d '2012-04-30 23:59:59' STOPPING

find . -type f -newer STARTING -not -newer STOPPING -exec rm {} \;

编辑:请注意,这将删除 4 月至 5 月之间的文件。因此,2012 年 4 月 1 日至 2012 年 4 月 30 日之间的文件将被删除。此外,在实际删除它们之前查看您将要删除的文件列表也是一个好主意。为此,请更改rmls -la

于 2012-07-30T03:00:46.437 回答
0

您可以首先在您可以轻松识别的日期中显示文件及其最后修改时间stat

$ stat -c '%n %z' foo bar
2012-02-25 23:39:31.000000000 +0000 foo
2012-02-25 23:43:35.000000000 +0000 bar

结合它,grep您可以将列表过滤到您想要的月份:

$ stat -c '%n %z' foo bar | grep -E '^2012-0[45]-.. '

这应该为您提供在 2012 年 4 月至 2012 年 5 月之间修改过的文件。然后,您将只想提取文件名(从第四个字段开始)进行删除,使用cut

$ stat -c '%n %z' foo bar | grep -E '^2012-0[45]-.. ' | cut -f 4- -d' '

一旦你对输出感到满意,然后像这样删除它们(这是不归路,所以系好安全带:):

$ !! | while read filename; do rm -f "$filename"; done

注意:该!!符号会重复最后一个命令,因此您不必重新键入它。在这种情况下,它将重复 stat 命令并在最后进行最终剪切。

于 2012-07-30T02:10:45.140 回答
0

awk 可以帮助您从单个月(或一组月)中​​删除文件

ls -l | awk '{if ($6=="Apr" || $6=="Mai") print $9}' | xargs rm 
于 2012-07-30T02:04:28.043 回答