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

如何在Bash中删除目录内所有内容但保留子目录中的指定文件?

Bash 删除目录内容但保留指定文件的方法

下面提供几种可靠的实现方式,根据你的场景选择即可:

方法一:临时移动保留文件(直观易理解)

先把要保留的文件移到安全位置,清空目标目录后再移回,适合新手操作:

# 将目标文件临时移到当前工作目录
mv d1/d2/f1.txt ./
# 清空d1目录下所有内容
rm -rf d1/*
# 重建原路径的目录结构
mkdir -p d1/d2
# 将文件移回原位置
mv f1.txt d1/d2/

方法二:用find命令精准排除(无需移动文件)

通过find命令匹配所有需要删除的内容,排除指定文件后直接删除:

# 删除d1下所有非保留的文件
find d1 -type f -not -path "d1/d2/f1.txt" -delete
# 删除d1下所有空目录(避免残留空文件夹)
find d1 -type d -empty -delete

如果不需要保留空目录,也可以用更简洁的单条命令(注意:若目标文件所在目录非空,该命令不会删除此目录):

find d1 -mindepth 1 -not -path "d1/d2/f1.txt" -delete

方法三:rsync同步空目录(高效批量操作)

利用rsync的同步特性,用空目录作为源,删除目标目录中多余的内容,同时排除要保留的文件:

# 创建临时空目录
mkdir empty_dir
# 同步空目录到d1,删除d1中不存在于空目录的内容,同时排除指定文件
rsync -av --delete --exclude="d2/f1.txt" empty_dir/ d1/
# 清理临时目录
rmdir empty_dir

内容的提问来源于stack exchange,提问作者Jackoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:20:28