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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 工作日记:清理指定后缀名文件的 powerhsell 小脚本

清理指定后缀名文件的 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日志并进行多维度分析。
目录
相关文章
|
6月前
|
运维
简记:清理指定后缀名文件的 powerhsell 小脚本
简记:清理指定后缀名文件的 powerhsell 小脚本
59 0
|
6月前
|
存储 Java 程序员
文件的介绍
文件的介绍
107 1
|
6月前
|
存储 Python 内存技术
什么是文件?
什么是文件?
158 0
|
6月前
|
Windows
HiBit Uninstaller v3.2.10单文件版
HiBit Uninstaller是一款免费无广告功能强大的软件卸载程序,有强制卸载、批量卸载程序、Windows应用商店Appx管理器、Windows更新补丁管理器、浏览器扩展管理器、注册表清理、磁盘垃圾文件清理、快捷方式修复、文件粉碎程序、进程管理器、启动项管理器、系统服务管理器、计划任务管理器、资源管理器菜单项管理器、Windows系统还原管理器等功能。
50 2
|
6月前
|
存储 内存技术
什么是文件
什么是文件
153 0
|
数据安全/隐私保护
p文件如何转为m文件
如果你是MATLAB爱好者,你一定知道MATLAB P文件,但是,你是否也和许多人一样,摸不着头脑?难道你也经常遇到MATLAB P文件加密问题,难以阅读和研究吗?那么,你需要一个MATLAB P文件解密工具!
|
存储 C语言
文件(下)——“C”
文件(下)——“C”
|
Go 数据安全/隐私保护 Windows
WinNTSetup V5.3.0 Bata5 单文件版
WinNTSetup 是一款Windows系统硬盘安装器,支持从PE和本地安装系统,支持支持NT内核的系统。
WinNTSetup V5.3.0 Bata5 单文件版
小技巧——对比两个文件是否相同
小技巧——对比两个文件是否相同
120 0