删除文件 - 特定日期

nac*_*has 4 shell

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

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

Gil*_*il' 8

您的代码有三个问题:

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

find命令允许您根据标准搜索文件,例如其名称与特定模式匹配或其日期在特定范围内.例如,以下命令将列出当前目录及其今天修改的子目录中的文件(按GMT日历日期).更换echorm --,一旦你检查你有正确的文件.

find . -type f -mtime -2 -exec echo {} +
Run Code Online (Sandbox Code Playgroud)

使用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 {} +
Run Code Online (Sandbox Code Playgroud)

或者,进一步缩写:

find -maxdepth 1 -type f -newermt "Nov 22" \! -newermt "Nov 23" -delete
Run Code Online (Sandbox Code Playgroud)

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

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