运维小笔记:清理指定后缀名文件的 powerhsell 小脚本

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在运维值班每天都需要从系统导出这种数据,压缩好放在工作电脑上,解压用脚本做汇总。但是长期都没删除各个日期下的压缩包。几年下来,有上千个目录,也不知道哪些目录中有没有删除的压缩包。一个一个手删太累了,不妨做个 powershell 小脚本一键搞定吧。

清理指定后缀名文件的 powerhsell 小脚本


jcLee95

已入驻阿里云博客

邮箱 :291148484@163.com
本文地址
- https://developer.aliyun.com/article/
- https://blog.csdn.net/qq_28550263/article/details/129121074

1.介绍

2.目录结构

3.主函数部分

4.正则匹配压缩文件后缀名 - 筛选压缩文件

5.由路径删除文件,失败时提示

6.完整 clear_zip_7Z.ps1 代码


1.介绍

在运维值班每天都需要从系统导出这种数据,压缩好放在工作电脑上,解压用脚本做汇总。但是长期都没删除各个日期下的压缩包。几年下来,有上千个目录,也不知道哪些目录中有没有删除的压缩包。一个一个手删太累了,不妨做个 powershell 小脚本一键搞定吧。

这个脚本同样适合于删除目录中其它后缀名的文件。

相关工具代码

后文用到了两个工具模块,这两个模块在我之前的两篇博客中有完整介绍和源代码:

2.目录结构

项目结构

日志结构

3.主函数部分

为了以后方便指定仅针对某个年份,或者修改为其它需要考虑年份的脚本,可以不要直接读取日志根目录中所有文件,而是逐个遍历所有年份下的文件夹:

function main($BASE_DIR) {
    $logger.Trace("Start compute...")
    $logger.Trace($BASE_DIR)
    $items = [Path]::get_items($BASE_DIR)
    foreach ($item in $items) {  
        Write-host -ForegroundColor 'Gray' "=========================================================================================================="
        # 对于目录
        $logger.Info("Current folder is: " + $item)
        if ([Path]::is_dirname($item)) {
            write-host -ForegroundColor 'DarkBlue' "=====> This is a folder!"
            foreach ($item in [Path]::get_descendants($item) ) {
                write-host -ForegroundColor 'DarkGreen' "=> This is a file!"$item
                if (IsArchiveFile($item)) {
                    write-host -ForegroundColor 'Yellow' " * This is a archive file, and it will be remove:"
                    write-host -ForegroundColor 'Green' "  "$item
                    deleteFileByPath($item)
                }
                else {
                    write-host -ForegroundColor 'Gray' " - But not a archive file"
                }
            }
            # 对于文件
        }
        elseif ([Path]::is_filename($item)) {
            write-host -ForegroundColor 'DarkGreen' "=> This is a file!"$item
            if (IsArchiveFile($item)) {
                write-host -ForegroundColor 'Yellow' " * This is a archive file, and it will be remove!"
                write-host -ForegroundColor 'Green' "  "$item
                deleteFileByPath($item)
            }
            else {
                write-host -ForegroundColor 'Gray' " - But not a archive file"
            }
        }
    }
}

4.正则匹配压缩文件后缀名 - 筛选压缩文件

function IsArchiveFile([string]$file_path) {
    $is7z = $file_path -match "\.7z$"
    $isZip = $file_path -match "\.zip$"
    $isTar = $file_path -match "\.tar$"
    $isWim = $file_path -match "\.wim$"
    $isAechiveFile = $is7z -or $isZip -or $isTar -or $isWim
    return $isAechiveFile
}

5.由路径删除文件,失败时提示

function deleteFileByPath([string]$file_path) {
    try{
        Remove-Item -Path $file_path
        write-host -ForegroundColor 'Blue' "Ok, this file has been removed!"
        return $True
    }catch{
        Write-Warning "An error occurred While delete file:"
        Write-Host $_
        return $False
    }
}

6.完整 clear_zip_7Z.ps1 代码

<#
@Author: Jack Lee;
@Email: 291148484@163.com;
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#>
using module .\utils\jcpath.psm1
using module .\utils\jclogger.psm1
$PRODUCTION_BASE_DIR = [Path]::get_dirpath([Path]::get_dirpath($MyInvocation.MyCommand.source))
$logger = [Logger]::new([Path]::Join($PRODUCTION_BASE_DIR, 'logs'));
function IsArchiveFile([string]$file_path) {
    $is7z = $file_path -match "\.7z$"
    $isZip = $file_path -match "\.zip$"
    $isTar = $file_path -match "\.tar$"
    $isWim = $file_path -match "\.wim$"
    $isAechiveFile = $is7z -or $isZip -or $isTar -or $isWim
    return $isAechiveFile
}
function deleteFileByPath([string]$file_path) {
    try {
        Remove-Item -Path $file_path
        write-host -ForegroundColor 'Blue' "Ok, this file has been removed!"
        return $True
    }
    catch {
        Write-Warning "An error occurred While delete file:"
        Write-Host $_
        return $False
    }
}
function main($BASE_DIR) {
    $logger.Trace("Start compute...")
    $logger.Trace($BASE_DIR)
    $items = [Path]::get_items($BASE_DIR)
    foreach ($item in $items ) {  
        Write-host -ForegroundColor 'Gray' "=========================================================================================================="
        # 对于目录
        $logger.Info("Current folder is: " + $item)
        if ([Path]::is_dirname($item)) {
            write-host -ForegroundColor 'DarkBlue' "=====> This is a folder!"
            foreach ($item in [Path]::get_descendants($item) ) {
                write-host -ForegroundColor 'DarkGreen' "=> This is a file!"$item
                if (IsArchiveFile($item)) {
                    write-host -ForegroundColor 'Yellow' " * This is a archive file, and it will be remove:"
                    write-host -ForegroundColor 'Green' "  "$item
                    deleteFileByPath($item)
                }
                else {
                    write-host -ForegroundColor 'Gray' " - But not a archive file"
                }
            }
            # 对于文件
        }
        elseif ([Path]::is_filename($item)) {
            write-host -ForegroundColor 'DarkGreen' "=> This is a file!"$item
            if (IsArchiveFile($item)) {
                write-host -ForegroundColor 'Yellow' " * This is a archive file, and it will be remove!"
                write-host -ForegroundColor 'Green' "  "$item
                deleteFileByPath($item)
            }
            else {
                write-host -ForegroundColor 'Gray' " - But not a archive file"
            }
        }
    }
}
main($PRODUCTION_BASE_DIR)
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
2月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
187 56
|
21天前
|
运维 Kubernetes Devops
自动化运维:从脚本到工具的演进之旅
在数字化浪潮中,自动化运维成为提升效率、保障系统稳定的关键。本文将探索自动化运维的发展脉络,从基础的Shell脚本编写到复杂的自动化工具应用,揭示这一技术变革如何重塑IT运维领域。我们将通过实际案例,展示自动化运维在简化工作流程、提高响应速度和降低人为错误中的重要作用。无论你是初学者还是资深专家,这篇文章都将为你提供宝贵的洞见和实用的技巧。
|
26天前
|
运维 Devops
自动化运维:从脚本到DevOps的进化之旅
在数字化时代,自动化运维不仅是提高生产效率的关键,更是企业竞争力的象征。本文将带领读者穿越自动化运维的发展历程,从最初的脚本编写到现代DevOps文化的形成,揭示这一演变如何重塑IT行业的工作模式。通过具体案例,我们将展示自动化工具和实践如何简化复杂任务,优化流程,并促进团队协作。你将发现,自动化运维不仅关乎技术的进步,更体现了人、流程和技术三者之间协同增效的深层逻辑。
|
1月前
|
机器学习/深度学习 人工智能 运维
自动化运维之路:从脚本到工具的演进
在IT运维领域,效率和准确性是衡量工作成效的关键指标。随着技术的发展,自动化运维逐渐成为提升这两个指标的重要手段。本文将带领读者了解自动化运维的演变历程,从最初的简单脚本编写到现今复杂的自动化工具应用,展示如何通过技术提升运维效率。文章不仅介绍理论和实践案例,还提供了代码示例,帮助读者理解自动化运维的实际应用场景。
|
1月前
|
运维 监控 网络安全
自动化运维的崛起:如何利用Python脚本简化日常任务
【10月更文挑战第43天】在数字化时代的浪潮中,运维工作已从繁琐的手工操作转变为高效的自动化流程。本文将引导您了解如何运用Python编写脚本,以实现日常运维任务的自动化,从而提升工作效率和准确性。我们将通过一个实际案例,展示如何使用Python来自动部署应用、监控服务器状态并生成报告。文章不仅适合运维新手入门,也能为有经验的运维工程师提供新的视角和灵感。
|
1月前
|
运维 监控 Python
自动化运维:使用Python脚本简化日常任务
【10月更文挑战第36天】在数字化时代,运维工作的效率和准确性成为企业竞争力的关键。本文将介绍如何通过编写Python脚本来自动化日常的运维任务,不仅提高工作效率,还能降低人为错误的风险。从基础的文件操作到进阶的网络管理,我们将一步步展示Python在自动化运维中的应用,并分享实用的代码示例,帮助读者快速掌握自动化运维的核心技能。
88 3
|
1月前
|
缓存 运维 NoSQL
python常见运维脚本_Python运维常用脚本
python常见运维脚本_Python运维常用脚本
31 3
|
1月前
|
运维 监控 应用服务中间件
自动化运维:如何利用Python脚本提升工作效率
【10月更文挑战第30天】在快节奏的IT行业中,自动化运维已成为提升工作效率和减少人为错误的关键技术。本文将介绍如何使用Python编写简单的自动化脚本,以实现日常运维任务的自动化。通过实际案例,我们将展示如何用Python脚本简化服务器管理、批量配置更新以及监控系统性能等任务。文章不仅提供代码示例,还将深入探讨自动化运维背后的理念,帮助读者理解并应用这一技术来优化他们的工作流程。
|
1月前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
1月前
|
运维 Prometheus 监控
自动化运维之路:从脚本到DevOps
【10月更文挑战第25天】在数字化时代的浪潮中,运维不再是简单的服务器管理,而是成为了企业竞争力的核心。本文将带你走进自动化运维的世界,探索如何通过技术手段提升效率和稳定性,以及实现快速响应市场的能力。我们将一起学习如何从基础的脚本编写进化到全面的DevOps实践,包括工具的选择、流程的优化以及文化的建设。无论你是运维新手还是资深专家,这篇文章都将为你提供有价值的见解和实用的技巧。
40 3

热门文章

最新文章