清理指定后缀名文件的 powerhsell 小脚本
jcLee95
已入驻阿里云博客
邮箱 :291148484@163.com
本文地址:
- https://developer.aliyun.com/article/
- https://blog.csdn.net/qq_28550263/article/details/129121074
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)