Bash 从文件名获取日期,如果日期早于某个日期,则删除该文件
我在多个子文件夹中有一堆文件,如下所示:Bash 从文件名获取日期,如果日期早于某个日期,则删除该文件,bash,Bash,我在多个子文件夹中有一堆文件,如下所示: folder1 - folder1a - dira -dirb - folder-1999-07-05.txt - folder-1999-07-04.txt - folder-1999-07-03.txt - 1999-07-02_a2-abcd.txt folder2 - folder2a - dira -dirb - folder-1995-07
folder1
- folder1a
- dira
-dirb
- folder-1999-07-05.txt
- folder-1999-07-04.txt
- folder-1999-07-03.txt
- 1999-07-02_a2-abcd.txt
folder2
- folder2a
- dira
-dirb
- folder-1995-07-05.txt
- folder-1995-07-04.txt
- folder-1995-07-03.txt
- 1995-07-02_a2-abcd.txt
现在,如果我想删除超过某个日期(例如1996-01)的文件,最好/最有效的方法是什么?您可以使用
find
和while-read循环。在您的示例中,日期已经在文件名中,因此这应该可以工作
#/usr/bin/env bash
##:使用文件夹填充名为folders的数组。
folders=(folder1 folder2 folder3另一个\u文件夹新建\u文件夹)
##:在变量中设置日期限制。
限额=1996-01
##:使用while read循环遍历find的输出。
而IFS=read-rd“”文件;做
files=${files##*/}
files=${files}*[!0-9]}
如果[[$files<$limit]];然后##:如果文件名中的日期早于设置的限制。
echo rm-rf“$files”##:删除文件
其他的
echo“$文件比$limit新”
fi##:使用find查找以.txt结尾的文件
done done<你说的“年长”是什么意思?创建日期?修改日期?访问日期?查看find(1)和stat(1)实用程序。并显示您到目前为止获得的信息。对,您指的是哪个日期。我的意思是,如果这些文件的名称中有日期(1995-07文件为1995-07-02_a2-abcd.txt,日期在日期之前,例如1996-01),则该文件将被删除。这是否回答了问题?Previor的意思是时间更早。而且,第一个脚本将删除名称以文件夹-
开头的所有文件;仔细看看OP的例子,这篇文章提到过现在,如果我想删除比某个日期(如1996-01)早的文件,最好/最有效的方法是什么?
是的,脚本将删除比1996-06高的所有文件,echo
在那里,因此如果OP说输出不正确,那么我将修复问题。OP示例中的一些文件具有文件夹-
前缀,因此[[${files}.*/}>$limit]
将比较folder-1995-01。。。至1996-01,从而评估为真实;它甚至不考虑日期部分,因为f>1