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

从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

使用方法:

  1. 把上面的代码保存成cleanup.sh文件
  2. 打开终端,给脚本添加执行权限:chmod +x cleanup.sh
  3. 运行脚本:./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()

使用方法:

  1. 保存成cleanup.py文件
  2. 终端运行:python3 cleanup.py

同样,测试的时候可以把unlink和rmdir换成print(file_path)和print(dir_path),先确认要删除的内容。

备注:内容来源于stack exchange,提问作者Christopher Boelens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 12:39:08