文件夹内的归档文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件夹内的归档文件相关的知识,希望对你有一定的参考价值。

我想做以下工作,例如,我们有一个文件夹列表,并希望在与xml文件位置相同的目录下进行存档。

文件夹1

  • 子文件夹1

    • XML文件1
    • XML文件2
  • 子文件夹2

    • XML文件1
    • XML文件2
  • 子文件夹3

    • XML文件1
    • XML文件2

我想实现的是,我想把超过30天的xml文件按月归档到每个子文件夹中。

文件夹1

  • 子文件夹1

    • XML文件1
    • XML文件2
    • archive-mar-2020.zip
    • archive-feb-2020.zip
  • 子文件夹2

    • XML文件1
    • XML文件2
    • archive-mar-2020.zip
    • archive-feb-2020.zip

这就是我现在的情况,所以我需要把目标路径改成当前文件夹之类的,但我不知道该怎么做。

# set folder path
$log_path = "F:\test\*.xml"
$zip_path = "F:\test\*.7z"
$target_path = "F:\test-zip\"

# set min age of files
$max_days = "-30"
$delete_max_days = "-365"

# get the current date
$curr_date = Get-Date

# determine how far back we go based on current date
$zip_date = $curr_date.AddDays($max_days)
$delete_zip_date = $curr_date.AddDays($delete_max_days)

#$zip_date = (Get-Date).AddMonths(0).Month

# filter files
Get-ChildItem $log_path -Recurse | Where-Object  ($_.LastWriteTime -lt $zip_date) -and ($_.psIsContainer -eq $false)|

    ForEach 
    $Zip = $target_path + "0:MMM_0:yyyy.7z" -f $_.LastWriteTime
    & "C:\Program Files\7-Zip\7z.exe" u -mx9 -t7z -m0=lzma2  $Zip $_.FullName |Out-Null
    If ($LastExitCode -eq 0)  Remove-Item $_.FullName 
    

$deletefile = Get-ChildItem $zip_path | Where-Object  $_.LastWriteTime -lt $delete_zip_date  | Remove-Item
答案

这是未经测试的

我想你需要先得到子文件夹的列表,然后在上面迭代,找到每个子文件夹中的xml文件。

根据格式化的LastWriteTime(MMM-yyy)属性对文件进行分组,并以此为基础确定存档名称。

类似于

# set folder paths
$log_path    = "F:\test"
$zip_path    = "F:\test"
$target_path = "F:\test-zip"

# set min age of files
$max_days = -30
$delete_max_days = -365

# get the current date
$curr_date = (Get-Date).Date

# determine how far back we go based on current date
$zip_date = $curr_date.AddDays($max_days)
$delete_zip_date = $curr_date.AddDays($delete_max_days)

# first get a list of subfolders full names
$subDirs = (Get-ChildItem -Path $log_path -Directory -Recurse).FullName
foreach ($subFolder in $subDirs) 
    # within each subfolder, get the xml files
    Get-ChildItem -Path $subFolder -Filter '*.xml' -File -Recurse | Where-Object  $_.LastWriteTime -lt $zip_date  |
    Group-Object @Expression = '0:MMM-yyyy' -f $_.LastWriteTime  |
    ForEach-Object 
        # $_.Name is the name of the group, which is the formatted LastWriteTime
        $zipFile = Join-Path -Path $target_path -ChildPath "archive-$($_.Name).7z"
        foreach ($file in $_.Group) 
            & "C:\Program Files\7-Zip\7z.exe" u -mx9 -t7z -m0=lzma2  $zipFile $_.FullName | Out-Null
            if ($LastExitCode -eq 0)  Remove-Item $_.FullName 
        
    



$deletefile = Get-ChildItem -Path $zip_path -Filter '*.7z' -File | Where-Object  $_.LastWriteTime -lt $delete_zip_date  | Remove-Item

以上是关于文件夹内的归档文件的主要内容,如果未能解决你的问题,请参考以下文章

Linux 的备份和压缩命令

tar命令

使用 MapReduce API 通过 Gzip 压缩复制 HDFS 内的文件

Linux命令tar命令

tar命令

Linux打包和压缩