Linux 删除文件与目录完全指南(安全删除 + 运维技巧)

在 Linux 运维或开发过程中,删除文件和目录是最常见的操作之一。但如果使用不当,很容易造成误删甚至系统故障。本文系统介绍 Linux 中删除文件与目录的常用方法,并给出实际运维中的安全技巧。

一、删除文件:rm 命令

Linux 删除文件最常用的命令是 rm(remove)。

1 删除单个文件

rm file.txt

执行后文件会被直接删除,不会进入回收站。

2 删除多个文件

rm file1.txt file2.txt file3.txt

也可以使用通配符:

rm *.log

表示删除所有 .log 文件。

3 删除前进行确认

为了避免误删,可以使用 -i 参数:

rm -i file.txt

系统会提示:

rm: remove regular file 'file.txt'?

输入 y 才会删除。

二、删除目录

目录删除通常需要递归删除。

1 删除空目录

rmdir dir

注意:如果目录中有文件,会删除失败。

2 删除非空目录

最常用命令:

rm -r dir

参数说明:

参数 含义
-r 递归删除
-f 强制删除
-i 删除前询问

3 强制删除目录(最常见)

rm -rf dir

这是 Linux 运维中最常见的删除命令。

⚠️ 非常危险

rm -rf /

会删除整个系统。

三、删除目录中的所有文件

如果要清空某个目录:

rm -rf /data/*

但这个命令 不会删除隐藏文件

删除隐藏文件

Linux 中隐藏文件以 . 开头。

.cache
.config

删除隐藏文件可以使用:

rm -rf /data/.* /data/*

但这种方式容易出问题,因此不推荐。

四、使用 find 删除文件

在实际运维中,find 是更安全和强大的删除工具。

1 删除某类文件

例如删除所有 .log 文件:

find /data -name "*.log" -delete

2 删除 7 天前的日志

find /data/logs -mtime +7 -delete
参数 含义
-mtime 按修改时间
+7 7 天之前

3 删除大文件

例如删除大于 100MB 的文件:

find /data -size +100M -delete

五、删除文件但排除某个目录

这是实际运维中非常常见的需求。

例如清空当前目录,但保留 keepdir

错误示例

find . -mindepth 1 ! -name keepdir -exec rm -rf {} +

问题是:

-name keepdir 只匹配目录本身,不会排除里面的文件。

keepdir/file1
keepdir/file2

仍然会被删除。

正确方法:使用 prune

find . -path ./keepdir -prune -o -mindepth 1 -exec rm -rf {} +
参数 作用
-prune 停止遍历目录
-o 否则执行
-mindepth 1 避免删除当前目录

删除前先查看

find . -path ./keepdir -prune -o -mindepth 1 -print

确认无误后再执行删除。

六、排除多个目录

例如保留:

keepdir
logs
backup
find . \( -path ./keepdir -o -path ./logs -o -path ./backup \) -prune -o -mindepth 1 -exec rm -rf {} +

七、使用 Bash 排除目录

开启扩展:

shopt -s extglob

删除除 keepdir 外的所有内容:

rm -rf !(keepdir)

但这种方法:

  • 只适用于 bash
  • 不适用于所有 shell

八、运维中常见的安全技巧

1 删除前先查看

find ... -print

2 防止误删根目录

rm --preserve-root

3 给 rm 加别名

alias rm='rm -i'

九、快速清空大目录(运维技巧)

当目录文件非常多时:

rm -rf

可能会很慢。

更快的方法:

find /data -mindepth 1 -delete

十、总结

场景 命令
删除文件 rm file
删除目录 rm -r dir
强制删除 rm -rf dir
删除某类文件 find -name
按时间删除 find -mtime
排除目录删除 find -prune
清空目录 find -mindepth 1 -delete

最重要的一条原则

删除操作不可恢复。

因此在执行删除命令之前:

  1. 先确认路径
  2. 先打印结果
  3. 再执行删除

这也是 Linux 运维中最基本的安全习惯。

发表回复