本文目录导读:

Bash 版本(Linux/macOS)
#!/bin/bash
# 批量给文件添加校验和脚本
# 用法: ./add_checksum.sh [目录路径] [校验和类型]
# 默认配置
TARGET_DIR="${1:-.}" # 默认当前目录
CHECKSUM_TYPE="${2:-sha256}" # 默认使用 SHA256
# 支持的校验和类型
SUPPORTED_TYPES=("md5" "sha1" "sha256" "sha512" "sha224" "sha384")
# 检查校验和类型是否支持
validate_type() {
local type=$1
for supported_type in "${SUPPORTED_TYPES[@]}"; do
if [[ "$type" == "$supported_type" ]]; then
return 0
fi
done
echo "错误: 不支持的校验和类型 '$type'"
echo "支持的类型: ${SUPPORTED_TYPES[*]}"
exit 1
}
# 获取校验和命令
get_checksum_cmd() {
local type=$1
case "$type" in
md5) echo "md5sum" ;;
sha1) echo "sha1sum" ;;
sha256) echo "sha256sum" ;;
sha512) echo "sha512sum" ;;
sha224) echo "sha224sum" ;;
sha384) echo "sha384sum" ;;
esac
}
# 主函数
main() {
# 验证参数
validate_type "$CHECKSUM_TYPE"
# 检查目标目录
if [[ ! -d "$TARGET_DIR" ]]; then
echo "错误: 目录 '$TARGET_DIR' 不存在"
exit 1
fi
# 获取校验和命令
CHECKSUM_CMD=$(get_checksum_cmd "$CHECKSUM_TYPE")
# 检查命令是否存在
if ! command -v "$CHECKSUM_CMD" &> /dev/null; then
echo "错误: 命令 '$CHECKSUM_CMD' 未安装"
exit 1
fi
echo "开始对目录 '$TARGET_DIR' 中的文件添加 $CHECKSUM_TYPE 校验和..."
# 计数器
processed=0
skipped=0
errors=0
# 遍历所有文件(排除目录和校验和文件本身)
while IFS= read -r -d '' file; do
# 跳过校验和文件本身
if [[ "$file" == *".$CHECKSUM_TYPE" ]]; then
continue
fi
# 计算校验和
if checksum=$("$CHECKSUM_CMD" "$file" | cut -d' ' -f1); then
# 创建校验和文件
checksum_file="${file}.${CHECKSUM_TYPE}"
# 检查是否已存在校验和文件
if [[ -f "$checksum_file" ]]; then
echo "跳过: $file (校验和文件已存在)"
((skipped++))
continue
fi
# 写入校验和
echo "$checksum $file" > "$checksum_file"
echo "处理: $file -> $checksum_file"
((processed++))
else
echo "错误: 无法计算 '$file' 的校验和"
((errors++))
fi
done < <(find "$TARGET_DIR" -type f -print0)
# 显示统计信息
echo ""
echo "完成! 统计:"
echo " 处理成功: $processed"
echo " 跳过: $skipped"
echo " 错误: $errors"
}
# 运行主函数
main
PowerShell 版本(Windows)
<#
.SYNOPSIS
批量给文件添加校验和脚本
.DESCRIPTION
遍历指定目录中的所有文件,为每个文件生成校验和文件
.PARAMETER TargetPath
目标目录路径,默认为当前目录
.PARAMETER ChecksumType
校验和类型,可选 MD5, SHA1, SHA256, SHA384, SHA512,默认为 SHA256
.PARAMETER Force
强制覆盖已存在的校验和文件
.EXAMPLE
.\Add-FileChecksum.ps1
.\Add-FileChecksum.ps1 -TargetPath "C:\MyFiles" -ChecksumType MD5
.\Add-FileChecksum.ps1 -TargetPath ".\downloads" -ChecksumType SHA256 -Force
#>
param(
[Parameter(Position=0)]
[string]$TargetPath = ".",
[Parameter(Position=1)]
[ValidateSet("MD5", "SHA1", "SHA256", "SHA384", "SHA512")]
[string]$ChecksumType = "SHA256",
[switch]$Force
)
function Get-FileChecksum {
param(
[string]$FilePath,
[string]$Algorithm
)
try {
$hash = Get-FileHash -Path $FilePath -Algorithm $Algorithm
return $hash.Hash.ToLower()
}
catch {
Write-Error "无法计算 '$FilePath' 的校验和: $_"
return $null
}
}
function Main {
# 解析目标路径
$resolvedPath = Resolve-Path $TargetPath -ErrorAction SilentlyContinue
if (-not $resolvedPath) {
Write-Error "目录 '$TargetPath' 不存在"
return
}
Write-Host "开始对目录 '$resolvedPath' 中的文件添加 $ChecksumType 校验和..." -ForegroundColor Green
# 计数器
$processed = 0
$skipped = 0
$errors = 0
# 获取所有文件
$files = Get-ChildItem -Path $resolvedPath -File -Recurse
foreach ($file in $files) {
# 跳过校验和文件本身
if ($file.Extension -eq ".$ChecksumType") {
continue
}
$checksumFilePath = "$($file.FullName).$ChecksumType"
# 检查校验和文件是否已存在
if ((Test-Path $checksumFilePath) -and (-not $Force)) {
Write-Host "跳过: $($file.Name) (校验和文件已存在)" -ForegroundColor Yellow
$skipped++
continue
}
# 计算校验和
$checksum = Get-FileChecksum -FilePath $file.FullName -Algorithm $ChecksumType
if ($checksum) {
# 写入校验和文件
$content = "$checksum $($file.Name)`r`n"
try {
Set-Content -Path $checksumFilePath -Value $content -NoNewline
Write-Host "处理: $($file.Name) -> $($file.Name).$ChecksumType" -ForegroundColor Green
$processed++
}
catch {
Write-Error "写入校验和文件失败: $_"
$errors++
}
}
else {
$errors++
}
}
# 显示统计信息
Write-Host "`n完成! 统计:" -ForegroundColor Cyan
Write-Host " 处理成功: $processed" -ForegroundColor Green
Write-Host " 跳过: $skipped" -ForegroundColor Yellow
Write-Host " 错误: $errors" -ForegroundColor Red
}
# 运行主函数
Main
使用说明
Bash 版本
# 添加执行权限 chmod +x add_checksum.sh # 基本用法(当前目录,使用SHA256) ./add_checksum.sh # 指定目录和校验和类型 ./add_checksum.sh /path/to/files md5 ./add_checksum.sh /path/to/files sha256 ./add_checksum.sh /path/to/files sha512
PowerShell 版本
# 设置执行策略(如果需要) Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass # 基本用法 .\Add-FileChecksum.ps1 # 指定目录和校验和类型 .\Add-FileChecksum.ps1 -TargetPath "C:\MyFiles" -ChecksumType MD5 # 强制覆盖已存在的校验和文件 .\Add-FileChecksum.ps1 -TargetPath ".\downloads" -ChecksumType SHA256 -Force
功能特点
- 支持多种校验和类型:MD5、SHA1、SHA256、SHA384、SHA512
- 递归处理:自动遍历子目录
- 跳过已存在的校验和文件:避免重复处理
- 详细的错误处理:捕获并报告错误
- 统计信息:显示处理、跳过和错误的数量
- 跨平台:提供 Windows 和 Linux/macOS 版本
输出格式
校验和文件的内容格式:
<校验和值> 文件名
SHA256):
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 myfile.txt
这些脚本会自动创建与文件名相同的校验和文件(file.txt.sha256),并包含计算出的校验和值。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播