删除文件 - 特定日期

时间:2010-11-23 09:41:36

标签: shell

如何删除在特定日期创建的文件??

ls -ltr | grep "Nov 22" | rm - 为什么这不是什么?

5 个答案:

答案 0 :(得分:8)

您的代码有三个问题:

  • rm在其命令行中获取其参数,但您没有在命令行上传递任何文件名。您正在传递标准输入数据,但rm未读取该数据。有办法解决这个问题。
  • ls -ltr | grep "Nov 22"的输出不仅包含文件名,还包含mangled个文件名以及一些其他信息,例如时间。
  • grep过滤器不仅会捕获11月22日修改过的文件;它还将捕获名称包含Nov 22的文件等。它也不会在显示日期的区域设置中捕获您想要的文件。

find命令允许您根据条件搜索文件,例如其名称与特定模式匹配或其日期在特定范围内。例如,以下命令将列出当前目录及其今天已修改的子目录中的文件(按GMT日历日期)。一旦检查到您拥有正确的文件,请将echo替换为rm --

find . -type f -mtime -2 -exec echo {} +

使用GNU find,例如在Linux和Cygwin上找到的,有一些选项可以做得更好:

  • -maxdepth 1(必须在其他条件之前指定)将搜索限制在指定的目录中(即它不会递归)。
  • -mmin -43匹配最多42分钟前修改过的文件。
  • -newermt "Nov 22"匹配11月22日(当地时间)或之后修改的文件。

因此:

find . -maxdepth 1 -type f -newermt "Nov 22" \! -newermt "Nov 23" -exec echo {} +

或,进一步缩写:

find -maxdepth 1 -type f -newermt "Nov 22" \! -newermt "Nov 23" -delete

使用zsh,m glob qualifier将模式限制为在特定相对日期范围内修改的文件。例如,*(m1)扩展为过去24小时内修改的文件; *(m-3)扩展到过去48小时内修改的文件(首先将天数四舍五入为整数,然后-表示严格的不等式); *(mm-6)扩展到最近5分钟内修改的文件,依此类推。

¹ rm -i(普通rm用于只读文件)在删除之前使用它来读取确认y

答案 1 :(得分:2)

如果您需要尝试查找任何一天, 这可能会有所帮助

touch -d "2010-11-21 23:59:59" /tmp/date.start;
touch -d "2010-11-23 00:00:00" /tmp/date.end;
find ./ -type f -newer /tmp/date.start ! -newer /tmp/date.end -exec rm {} \;

答案 2 :(得分:1)

您更适合使用find命令:

find . -type f -mtime 1 -exec echo rm {} +

这将删除当前目录中一天前的所有文件并递归到其子目录中。如果要删除今天创建的文件,可以使用“0”。对输出感到满意后,删除echo,文件将被真正删除。

答案 3 :(得分:1)

如果你find支持它,就像GNU find那样,你可以使用:

find -type f -newermt "Nov 21" ! -newermt "Nov 22" -delete

将找到11月21日修改过的文件。

答案 4 :(得分:-3)

这将有效

rm `ls -ltr | grep "Nov 22" | awk '{print $8}'`