如何删除在特定日期创建的文件??
ls -ltr | grep "Nov 22" | rm
- 为什么这不是什么?
答案 0 :(得分:8)
您的代码有三个问题:
rm
在其命令行中获取其参数,但您没有在命令行上传递任何文件名。您正在传递标准输入数据,但rm
未读取该数据。有办法解决这个问题。ls -ltr | grep "Nov 22"
的输出不仅包含文件名,还包含mangled个文件名以及一些其他信息,例如时间。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}'`