以下是将苹果电脑上的文件元数据导入SQLite数据库的步骤,使用macOS系统默认命令完成:
1. 创建SQLite数据库
打开终端执行:
sqlite3 ~/Desktop/files.db "CREATE TABLE files (
id INTEGER PRIMARY KEY,
path TEXT UNIQUE,
size INTEGER,
created_time INTEGER,
modified_time INTEGER
);"
2. 编写Bash脚本处理文件
将以下脚本保存为 import_files.sh:
#!/bin/bash
DB_PATH="$HOME/Desktop/files.db"
# 开始事务
sqlite3 "$DB_PATH" "BEGIN TRANSACTION;"
# 遍历文件(排除隐藏目录如.DS_Store)
find "$HOME" -type f -not -path '*/\.*' -print0 | while IFS= read -r -d '' file; do
# 转义单引号
file_escaped=${file//\'/\'\'}
# 获取元数据
size=$(stat -f "%z" "$file")
ctime=$(stat -f "%B" "$file")
mtime=$(stat -f "%m" "$file")
# 插入数据库
sqlite3 "$DB_PATH" "INSERT OR IGNORE INTO files (path, size, created_time, modified_time) VALUES ('$file_escaped', $size, $ctime, $mtime);"
done
# 提交事务
sqlite3 "$DB_PATH" "COMMIT;"
echo "导入完成!数据库路径: $DB_PATH"
3. 运行脚本
赋予脚本执行权限并运行:
chmod +x import_files.sh
./import_files.sh
解释说明
- 数据库选择:使用macOS自带的SQLite,无需安装额外软件。
- 元数据收集:
path:文件完整路径size:文件大小(字节)created_time/modified_time:创建和修改时间戳
- 事务处理:通过
BEGIN TRANSACTION和COMMIT提升插入性能。 - 路径处理:
-print0和read -d ''处理含空格/特殊字符的文件名。- 单引号转义避免SQL注入问题。
- 排除隐藏文件:
-not -path '*/\.*'跳过如.DS_Store的文件。
验证结果
查询数据库:
sqlite3 ~/Desktop/files.db "SELECT COUNT(*) FROM files;"
sqlite3 ~/Desktop/files.db "SELECT path, size FROM files LIMIT 10;"
注意事项
- 范围调整:脚本默认遍历用户目录(
$HOME),如需全盘扫描需使用sudo并修改路径为/(谨慎操作)。 - 性能提示:首次导入可能较慢,建议分批处理或限制路径深度(如
-maxdepth 6)。 - 扩展性:如需存储文件内容,可添加BLOB字段并用
cat命令读取内容。
此方案平衡了系统兼容性与数据完整性,适用于文件元数据的快速归档。
推荐阅读:

发表评论