您的代码有三个问题:
rm在其命令行上获取其参数,但是您没有在命令行上传递任何文件名.您正在传递标准输入数据,但未rm读取该数据¹.有办法解决这个问题.ls -ltr | grep "Nov 22"并不仅仅包括文件名,它由错位的文件名,再加上一堆的其他信息,如时间.Nov 22等.它也不会在显示日期的区域设置中捕获您想要的文件.该find命令允许您根据标准搜索文件,例如其名称与特定模式匹配或其日期在特定范围内.例如,以下命令将列出当前目录及其今天修改的子目录中的文件(按GMT日历日期).更换echo的rm --,一旦你检查你有正确的文件.
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在删除之前使用它来读取确认.