当前位置: 首页 > 面试题库 >

根据文件名作为日期,删除所有超过30天的文件

李博达
2023-03-14
问题内容

我是bash的新手,我的任务是删除所有30天以上的文件,我可以根据文件名来解决这个问题Y_M_D.ext 2019_04_30.txt

我知道我可以ls在包含文件的文件夹中列出所有文件。我知道我可以获取今天的日期,$ date并可以对其进行配置以匹配文件格式$ date "+%Y_%m_%d"

我知道我可以使用删除文件rm

我如何将所有这些结合到一个bash脚本中,该脚本从今天起删除30天以上的文件?

在伪python代码中,我想它看起来像:

for file in folder:
    if file.name to date > 30 day from now:
        delete file

问题答案:

我绝不是系统管理员,但您可以考虑以下简单的shell脚本:

# Generate the date in the proper format
discriminant=$(date -d "30 days ago" "+%Y_%m_%d")

# Find files based on the filename pattern and test against the date.
find . -type f -maxdepth 1 -name "*_*_*.txt" -printf "%P\n" |
while IFS= read -r FILE; do
    if [ "${discriminant}" ">" "${FILE%.*}" ]; then
        echo "${FILE}";
    fi
done

请注意,专业人员可能会将其视为“外行”解决方案。也许使用可以更好地处理此问题awk,但不幸的是,我不习惯使用。



 类似资料:
  • 问题内容: 我有一个带有一堆文件的文件夹。我需要删除7月1日之前创建的所有文件。如何在bash脚本中做到这一点? 问题答案: 我认为以下应该做您想要的: 第一行创建一个文件,该文件最后一次修改是在2010年7月1日。第二行在/ path / to / file中找到日期不比虚拟文件新的所有文件,然后将其删除。 如果要再次检查它是否可以正常工作,请删除该参数,它只应列出将要删除的文件。

  • 我无法让FORFILES为我工作。我运行一个. bat,使用下面的一个示例备份我每天拥有的一些数据库。 然后,在运行备份后,我想使用下面的示例删除超过五天的旧文件。 但实际情况是,它创建备份,但从不删除旧的备份。我做错了什么? Ken这似乎仍然不起作用。我将@文件更改为@路径并运行了,但我仍然有备份。我还有另一个问题,我是否可以将删除限制为仅从bak\u开始的文件?我是否可以按文件名删除该文件,因

  • 问题内容: 关于如何删除所有30天以上的行有很多问题,但是我找不到与我相同的东西,因此我可以修复它 我需要删除一些超过30天的邮件记录,带有日期的列名称命名为sendOn,并且该列中的行看起来像这样2018-01-12 12:25:00我应该如何格式化查询从表中删除包含30天以上的所有记录? 这会工作吗? 编辑:上面的查询工作,但非常非常慢以任何方式使其更快?我试过了now()但它给出了函数错误的

  • 问题内容: 我正在尝试编写python脚本来删除X天之前的文件夹中的所有文件。这是我到目前为止所拥有的: 运行脚本时,我得到: , 并给出文件名。我究竟做错了什么? 问题答案: 返回裸文件名列表。它们没有完整的路径,因此您需要将其与包含目录的路径合并。您在删除文件时执行此操作,但在文件删除时(或在执行任一操作时)则不执行此操作。 最简单的解决方案是在循环的顶部执行一次: 现在是文件的完整路径,您可

  • 我有一个. tar文件,每天都有新文件更新。但是,文件超过60天后就没有价值了,不再需要放在归档中。如何从. tar归档中删除超过60天的文件? 我知道有一个 选项,但我不确定如何搜索符合该条件的文件的存档。

  • 我已经根据日期yyyy-mm-dd对配置单元表进行了分区。我想每天运行一个脚本,可以删除所有超过30天的分区,但在这种情况下,我不想超过日期。我希望它采取系统日期和删除超过30天的分区。