如何使用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 }