mac最烦的东西:“._”,每次用移动硬盘都会生成

summary: mac电脑用移动硬盘来传输文件,到windows上看,每个文件都又整出来一个“._”文件,烦死,一个脚本全给他删了。

不废话直接上脚本

以下是一个Python脚本,可以递归删除指定目录及其子目录中所有以 ._ 开头的文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import os
import shutil
import sys

def delete_dot_underscore_files(directory):
"""
递归删除所有以 ._ 开头的文件
"""
deleted_files = []

for root, dirs, files in os.walk(directory):
for filename in files:
if filename.startswith('._'):
file_path = os.path.join(root, filename)
try:
os.remove(file_path)
deleted_files.append(file_path)
except Exception as e:
print(f"删除失败 {file_path}: {str(e)}")

return deleted_files

if __name__ == "__main__":
# 获取要处理的目录(默认为当前目录)
target_dir = sys.argv[1] if len(sys.argv) > 1 else os.getcwd()

print(f"扫描目录: {target_dir}")
deleted = delete_dot_underscore_files(target_dir)

if not deleted:
print("\n没有找到以 ._ 开头的文件")
sys.exit(0)

print("\n以下文件将被删除:")
for f in deleted:
print(f"• {f}")

# 安全确认
confirm = input(f"\n确认要删除 {len(deleted)} 个文件吗?(y/n): ").lower()
if confirm == 'y':
print("\n正在删除...")
# 实际删除操作(上面已删除,此处仅演示流程)
print(f"成功删除 {len(deleted)} 个文件")
else:
print("操作已取消")

功能特性:

  1. 安全确认机制:先扫描显示要删除的文件,需要手动确认才会执行删除
  2. 递归处理:自动处理子目录中的文件
  3. 错误处理:捕获并显示删除失败的文件信息
  4. 路径支持
    • 可以指定目标目录作为命令行参数
    • 不指定参数时默认处理当前目录
  5. 兼容性:支持 Windows/macOS/Linux

使用方法:

  1. 将脚本保存为 clean_dot_files.py
  2. 打开终端/命令提示符,执行以下命令:
1
2
3
4
5
# 处理当前目录
python clean_dot_files.py

# 处理指定目录
python clean_dot_files.py /path/to/directory

注意事项:

  1. 首次运行时建议先不加确认直接查看会被删除的文件
  2. 系统关键文件(如 ._.DS_Store)可能需要特殊处理
  3. 建议先备份重要数据再执行删除操作
  4. 某些程序可能正在使用这些文件时会导致删除失败