从Windows迁移至Ubuntu后,批量清理指定文件及空文件夹的Shell/Python脚本实现咨询
从Windows迁移至Ubuntu后,批量清理指定文件及空文件夹的Shell/Python脚本实现咨询
嗨,刚从Windows转到Ubuntu,想把原来的批处理清理脚本转成Linux能用的是吧?我给你准备了Shell和Python两种方案,完全对应你原来的功能,一起来看看:
Shell脚本方案(最贴近Linux原生操作)
Shell脚本是替代Windows批处理的最直接选择,用find命令就能完美实现你的需求:
#!/bin/bash # 替换成你实际要清理的目录,比如~/Downloads/torrent/DONE TARGET_DIR="$HOME/Downloads/torrent/DONE" # 第一步:递归删除指定类型文件和带"sample"关键字的文件 # 对应你原来的for /R循环,匹配所有指定后缀和含sample的文件 find "$TARGET_DIR" -type f \( \ -name "*.txt" -o -name "*.jpg" -o -name "*.nfo" -o -name "*.exe" \ -o -name "*sample*" -o -name "*.sample*" -o -name "*-sample*" \ \) -delete # 第二步:递归删除空文件夹(从最深层开始删,避免父文件夹先被删导致子目录找不到) # find的-depth参数会自动先处理子目录,和你原来sort /r反向排序的效果一致 find "$TARGET_DIR" -type d -empty -delete
使用方法:
- 把上面的代码保存成
cleanup.sh文件 - 打开终端,给脚本添加执行权限:
chmod +x cleanup.sh - 运行脚本:
./cleanup.sh
小提示:如果怕误删,可以先把-delete换成-print,这样只会输出要删除的文件/文件夹,确认没问题再改回-delete。
Python脚本方案(更灵活,适合有Python基础的用户)
如果你更喜欢用Python,也可以写一个逻辑清晰的脚本,用pathlib模块处理路径更简洁:
import pathlib # 定义目标目录,替换成你的实际路径 target_dir = pathlib.Path.home() / "Downloads" / "torrent" / "DONE" # 第一步:删除指定类型和带"sample"关键字的文件 file_patterns = [ "*.txt", "*.jpg", "*.nfo", "*.exe", "*sample*", "*.sample*", "*-sample*" ] for pattern in file_patterns: # rglob递归匹配所有子目录里的文件 for file_path in target_dir.rglob(pattern): if file_path.is_file(): # missing_ok=True避免文件不存在时报错 file_path.unlink(missing_ok=True) # 第二步:删除空文件夹,按路径长度倒序遍历(先删深层子文件夹) for dir_path in sorted(target_dir.rglob("*"), key=lambda p: len(str(p)), reverse=True): if dir_path.is_dir() and not any(dir_path.iterdir()): dir_path.rmdir()
使用方法:
- 保存成
cleanup.py文件 - 终端运行:
python3 cleanup.py
同样,测试的时候可以把unlink和rmdir换成print(file_path)和print(dir_path),先确认要删除的内容。
备注:内容来源于stack exchange,提问作者Christopher Boelens
相关产品推荐
相关产品推荐

