powershell - 使用通配符后缀截断 azure 存储文件目录/删除 azure 存储文件
问题描述
我正在编写一个 Powershell 脚本,以便每月清理 azure 文件共享中的文件。
理想情况下,我希望一个脚本只截断目录/文件位置。但会满足于单独删除每个文件。
每月加载大约 20 个文件,每个文件都有一个唯一的名称和一个日期时间戳作为文件名中的后缀。例如文件名_20190121123515
我已经设法使用全名删除了一个文件,但需要对日期时间后缀使用通配符值。
我想要实现的正确语法是什么?或者我将如何截断整个文件夹?
$context = New-AzStorageContext -StorageAccountName "AccountName" -SasToken
"?sv=2015-12-11&si=bss-15D97F9B09D&sr=s&sig=xxxxxxxxxxxxxxxxxxxxx"
Remove-AzStorageFile -ShareName "bss" -Path
"root/Temp_Clean_up_test_Folder/FileName_%%%%%%%%%%%%%%.csv" -Context
$context
$context = New-AzStorageContext -StorageAccountName "AccountName" -SasToken
"?sv=2015-12-11&si=bss-15D97F9B09D&sr=s&sig=xxxxxxxxxxxxxxxxxxxxx"
Remove-AzStorageFile -ShareName "bss" -Path
"root/Temp_Clean_up_test_Folder/FileName_*" -Context $context
解决方案
cmdlet Remove-AzStorageFile 不支持通配符,需要使用循环的方式逐个删除文件。
示例代码如下:
$context = New-AzStorageContext -StorageAccountName "AccountName" -SasToken "xxx"
# Since the file name has date, you can specify which date to be deleted.
# In this sample, we try to delete the files' name contains 201901
$pattern ="201901"
# iterate all the files, and delete
Get-AzStorageFile -ShareName "testfolder" -Path "t1/t1sub" -Context $context | Get-AzStorageFile | where {($_.GetType().Name
-eq "CloudFile") -and ($_.Name -like "*$pattern*")} | Remove-AzStorageFile
删除前:
删除后(名称中包含“201901”的文件全部删除):
推荐阅读
- php - Laravel 5.7 Gate::allows 非静态方法 Illuminate\Auth\Access\Gate::allows() 不应被静态调用
- javascript - 部署全栈 Node JS 应用程序
- python - 为什么我的线拟合在对数对数刻度中拟合时会导致 np.nan 的梯度?
- javascript - 打开没有内容的打印窗口
- javascript - 为什么 Edge 在这种情况下无法获得正确的 keydown 值?
- python - pygame中的高分系统
- jquery - Ajax 请求未通过 POST 发送数据
- postgresql - 事务中的游标在 go 和 psql 之间的行为不同
- apache-spark - 通过 livy 批处理 API 从 driverLogUrl 读取 spark stdout
- ruby-on-rails - 当我重置为以前的提交时,git 不清除 development.sqlite3