我想查看有多少文件和文件夹已被更改(包括创建、删除和修改),已更改文件和文件夹的列表及其尺寸之前和之后。
那么是否存在一个实用工具(或脚本?)可以在两个不同的时间运行然后获取差异?
答案1
使用 PowerShell,组合一些 cmdlet 并不太困难。
Get-ChildItem
将文件夹/文件树放入对象中,- 用于
Export-Clixml/Import-Clixml
将对象存储在文件中
(xml 文件会占用一些空间), - 并将
Compare-Object
最新的与当前树进行比较。
## Q:\Test\2018\12\17\SU_1385185.ps1
$Base = 'C:\Test\'
$ArchiveFolder = $Env:tmp
function Archive-Tree {
$File = "{0}\Tree_{1:yyyyMMddHHmmss}.CliXML" -f $ArchiveFolder,[datetime]::Now
Get-ChildItem -Path $Base -Recurse | Export-Clixml $File
$File
}
## ----- get most recent file Tree_*.clixml
$File = Get-ChildItem "$($Env:tmp)\Tree_*.Clixml" | Select-Object -Last 1
if ($File){
$Old = Import-Clixml $File
$New = Import-Clixml (Archive-Tree)
Compare-Object -Ref $Old -Dif $New -Property FullName,
Length,LastWriteTime,CreationTime,LastAccessTime |
Sort-Object FullName,SideIndicator | Format-Table -AutoSize
} else {
$File = (Archive-Tree)
"No saved tree, now created as {0}" -f $File
}
示例输出
FullName Length LastWriteTime CreationTime LastAccessTime SideIndicator
-------- ------ ------------- ------------ -------------- -------------
C:\test\c_test.clixml 982258 2018-12-17 12:59:27 2018-12-17 12:59:24 2018-12-17 12:59:24 =>
C:\test\c_test.clixml 0 2018-12-17 12:59:24 2018-12-17 12:59:24 2018-12-17 12:59:24 <=
C:\Test\foo.baz 1164 2018-12-17 13:55:05 2018-12-17 13:55:21 2018-12-17 13:55:21 =>
引用SideIndicator <=
LHS 或 -ReferenceObject ( $OLD
),
引用SideIndicator =>
RHS 或 -DifferenceObject ( $New
)。