rm
===

用于删除给定的文件和目录

## 补充说明

**rm**  **命令** 可以删除一个目录中的一个或多个文件或目录，也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件，只是删除整个链接文件，而原有文件保持不变。

注意：使用rm命令要格外小心。因为一旦删除了一个文件，就无法再恢复它。所以，在删除文件之前，最好再看一下文件的内容，确定是否真要删除。rm命令可以用-i选项，这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项，系统会要求你逐一确定是否要删除。这时，必须输入y并按Enter键，才能删除文件。如果仅按Enter键或其他字符，文件不会被删除。

### 语法

```shell
rm (选项)(参数)
```

### 选项

```shell
-d：直接把欲删除的目录的硬连接数据删除成0，删除该目录；
-f：强制删除文件或目录；
-i：删除已有文件或目录之前先询问用户；
-r或-R：递归处理，将指定目录下的所有文件与子目录一并处理；
--preserve-root：不对根目录进行递归操作；
-v：显示指令的详细执行过程。
```

### 参数

文件：指定被删除的文件列表，如果参数中含有目录，则必须加上`-r`或者`-R`选项。

### 实例

交互式删除当前目录下的文件test和example

```shell
rm -i test example
Remove test ?n（不删除文件test)
Remove example ?y（删除文件example)
```

删除当前目录下除隐含文件外的所有文件和子目录

```shell
# rm -r *
```

应注意，这样做是非常危险的!

**删除当前目录下的 package-lock.json 文件**

```shell
find .  -name "package-lock.json" -exec rm -rf {} \;
```

**查找 *.html 结尾的文件并删除**

```shell
find ./docs -name "*.html" -exec rm -rf {} \;
```

**删除当前项目下 *.html 结尾的文件**

```shell
rm -rf *.html
```

**删除当前目录下的 node_modules 目录**

```shell
find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +
```

**删除文件**

```shell
# rm 文件1 文件2 ...
rm testfile.txt
```

**删除目录**

> rm -r [目录名称]
> -r 表示递归地删除目录下的所有文件和目录。
> -f 表示强制删除

```shell
rm -rf testdir
rm -r testdir
```

**删除操作前有确认提示**

> rm -i [文件/目录]

```shell
rm -r -i testdir
```

**批量删除 `icons` 文件夹中的子文件夹中的 data 文件夹**

```shell
rm -rf icons/**/data
```

**rm 忽略不存在的文件或目录**

> -f 选项（LCTT 译注：即 “force”）让此次操作强制执行，忽略错误提示

```shell
rm -f [文件...]
```

**仅在某些场景下确认删除**

> 选项 -I，可保证在删除超过 3 个文件时或递归删除时（LCTT 译注： 如删除目录）仅提示一次确认。


```shell
rm -I file1 file2 file3
```

**删除根目录**

> 当然，删除根目录（/）是 Linux 用户最不想要的操作，这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。
> 然而，如果你非得完成这个操作，你需要使用 --no-preserve-root 选项。当提供此选项，rm 就不会特殊处理根目录（/）了。

```shell
不给实例了，操作系统都被你删除了，你太坏了😆
```

**rm 显示当前删除操作的详情**

```shell
rm -v [文件/目录]
```


