使用 rm 仅删除文件而不删除文件夹

使用 rm 仅删除文件而不删除文件夹

我有一个这样的目录:

<folder1>
<folder2>
<folder3>
file1
file2
file3

rm 命令是什么样的,它只删除文件 1、文件 2、文件 3,但保留文件夹 1、文件夹 2 和文件夹 3 及其内容不变?

答案1

rm默认情况下不会删除目录。因此在您的示例中,假设你在父目录中这些就是所有文件,您所需要的只是:

rm *

这是一个危险的命令。如果您忘记了自己在哪里,这样的命令可能会删除重要$HOME文件、删除大量照片、取消圣诞节等等。*在运行之前,请确保您知道选择了什么。echo *这是一种测试扩展的好方法。

一个理智的人file1 file2 file3可能会运行rm file*rm file{1..3}使用一些 Bash 的扩展代码,而不会在交火中抓住任何你没有想到的掉队者。


要删除目录,您需要指定:

  • -d删除空目录,或者
  • -r递归删除文件及其目录。

答案2

正如@Oli 在他的文章中所说回答

rm 默认不会删除目录。


但你也可以使用find

find . -maxdepth 1 -type f -exec rm "{}" \;

或使用搜索模式

find . -maxdepth 1 -type f -name "a*" -exec rm "{}" \;

例子

% tree
.
├── a
├── b
├── bar
│   ├── a
│   └── b
└── foo
    ├── a
    └── b

%  find . -maxdepth 1 -type f -exec rm "{}" \;

% tree
.
├── bar
│   ├── a
│   └── b
└── foo
    ├── a
    └── b

或使用搜索模式

% find . -maxdepth 1 -type f -name "a*" -exec rm "{}" \;

% tree                                                  
.
├── b
├── bar
│   ├── a
│   └── b
└── foo
    ├── a
    └── b

相关内容