You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell按内容匹配查找仅存在于单个文件夹的独有文件

获取仅DirA存在、DirB不存在的文件列表(内容匹配)

你此前使用jdupes结果不符合预期,是因为默认开启了全范围(含单个目录内部)的重复匹配,DirA内部的重复文件会被判定为非全局唯一,因此被--printunique排除。以下是两种高效实现方案:

方案1:调整jdupes参数实现(性能最优)

jdupes内置文件大小预校验、部分哈希比对等优化,大文件场景下速度远高于手动全量哈希计算,仅需补充--no-internal参数即可解决你遇到的问题:

jdupes --recurse --no-internal --printunique -O DirA DirB

参数说明:

  • --recurse:递归遍历两个目录下所有子目录
  • --no-internal:关闭单个目录内部的重复比对,仅匹配DirA和DirB之间的文件,完全规避DirA内部重复被误排除的问题
  • --printunique:仅输出不存在匹配项的文件
  • -O:将首个输入目录(DirA)设为最高优先级,最终输出的仅为DirA下符合要求的文件

方案2:通用哈希校验方案(无工具依赖,全平台适配)

如果没有jdupes可用,可以通过哈希计算的方式实现,逻辑更可控:

步骤1:生成DirB所有文件的哈希参考集

会提取DirB下所有文件的SHA256哈希值去重后存储,作为后续比对的基准

  • Linux/macOS终端命令:
find DirB -type f -exec sha256sum {} \; | awk '{print $1}' | sort -u > dirb_hash.txt
  • Windows PowerShell命令:
Get-ChildItem -Path DirB -Recurse -File | Get-FileHash -Algorithm SHA256 | Select-Object -ExpandProperty Hash | Sort-Object -Unique | Out-File dirb_hash.txt

步骤2:遍历DirA输出符合要求的文件

计算DirA下每个文件的哈希值,和参考集比对后输出不在参考集内的文件路径

  • Linux/macOS终端命令:
find DirA -type f -exec sha256sum {} \; | awk 'NR==FNR{hash[$1]=1;next} !($1 in hash){print $2}' dirb_hash.txt -
  • Windows PowerShell命令:
$dirbHash = Get-Content dirb_hash.txt | ForEach-Object { $_.Trim() } | Where-Object { $_ }
Get-ChildItem -Path DirA -Recurse -File | ForEach-Object {
    $hash = (Get-FileHash -Path $_.FullName -Algorithm SHA256).Hash
    if ($hash -notin $dirbHash) { $_.FullName }
}

以上两种方案均仅以文件内容作为匹配依据,和文件名、存储路径无关,适配任意子目录嵌套场景。

内容的提问来源于stack exchange,提问作者JohnDoughmaker22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:06:04