如何使用Powershell递归地用0 bytes/nothing覆盖目录及其子目录中的每个文件?
How to use Powershell to recursively overwrite every file in a directory and its subdirectories with 0 bytes/nothing?
我有一个包含许多子目录和各种文件(带和不带扩展名)的目录。我希望能够保留文件夹结构以及所有文件的名称,但删除实际数据,从而减小目录的大小。也许它甚至可以只覆盖一定大小的文件,但这不是必需的。我认为使用 Powershell 可能可行,但我愿意接受其他选择。非常感谢您提供的所有帮助!
使用Get-ChildItem
检索文件列表。使用 Out-File
覆盖每个。
Get-ChildItem C:\example\Path -Recurse -File |
ForEach-Object {
"" | Out-File -Path $_.FullName -NoNewLine -Force
}
请注意,-NoNewLine
仅适用于较新版本的 PowerShell。
关于将文件归零的速度,Clear-Content
是最快的方法,在 10,000
次迭代中运行时间为 12.9
秒。
New-Item -Force
运行 在 13.1 秒。
$null | Out-File
运行 在 15.2 秒。
'' | Out-File
运行 在 18.2 秒。
Set-Content $null
运行 在 20.7 秒。
Set-Content ''
运行 在 25.8 秒。
$null > file
运行 在 16.7 秒。
'' > file
运行 在 18.1 秒。
函数示例:
function Write-Zero([string] $Path) { Clear-Content -Path $Path -Force }
我有一个包含许多子目录和各种文件(带和不带扩展名)的目录。我希望能够保留文件夹结构以及所有文件的名称,但删除实际数据,从而减小目录的大小。也许它甚至可以只覆盖一定大小的文件,但这不是必需的。我认为使用 Powershell 可能可行,但我愿意接受其他选择。非常感谢您提供的所有帮助!
使用Get-ChildItem
检索文件列表。使用 Out-File
覆盖每个。
Get-ChildItem C:\example\Path -Recurse -File |
ForEach-Object {
"" | Out-File -Path $_.FullName -NoNewLine -Force
}
请注意,-NoNewLine
仅适用于较新版本的 PowerShell。
关于将文件归零的速度,Clear-Content
是最快的方法,在 10,000
次迭代中运行时间为 12.9
秒。
New-Item -Force
运行 在 13.1 秒。$null | Out-File
运行 在 15.2 秒。'' | Out-File
运行 在 18.2 秒。Set-Content $null
运行 在 20.7 秒。Set-Content ''
运行 在 25.8 秒。$null > file
运行 在 16.7 秒。'' > file
运行 在 18.1 秒。
函数示例:
function Write-Zero([string] $Path) { Clear-Content -Path $Path -Force }