Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 从文件名获取日期,如果日期早于某个日期,则删除该文件_Bash - Fatal编程技术网

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结尾的文件
donedone<你说的“年长”是什么意思?创建日期?修改日期?访问日期?查看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