![使用 rm 仅删除文件而不删除文件夹](https://linux22.com/image/1085893/%E4%BD%BF%E7%94%A8%20rm%20%E4%BB%85%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E8%80%8C%E4%B8%8D%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E5%A4%B9.png)
我有一个这样的目录:
<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