'rm files*' 是否从所有子目录中删除所有匹配项?

Hor*_*ing 13 command-line bash

我想wordpress-891.sql从当前目录(不在子目录中)中删除任何看起来像的文件。

会成功rm wordpress-*.sql还是会从子目录中删除匹配项?

Zan*_*nna 20

不。正常的 globbing*不是递归的,rm.

如果目录名称匹配,则不会将其删除 - 您需要该-r标志来删除目录。

因此,如果您确定要删除这些文件,那么这样做是安全的。

还可以rm互动

rm -i wordpress-*.sql
Run Code Online (Sandbox Code Playgroud)

然后它会在删除每个文件之前要求确认


Rav*_*ina 14

是的,它可以为您解决问题并删除当前目录中具有该架构的所有文件。不,它不会删除子目录中的文件。

当您不确定运行以下命令时会发生什么时:

rm wordpress-*.sql
Run Code Online (Sandbox Code Playgroud)

然后使用ls以下命令运行它:

ls wordpress-*.sql
Run Code Online (Sandbox Code Playgroud)

您在输出中看到的文件是将被删除的文件。

当您尝试获取如下列表时:foo*最好使用-dswitch withls来防止列出名为foobar/etc的目录的文件。

ls -d foo*
Run Code Online (Sandbox Code Playgroud)

这个技巧适用于不用于递归完成工作的命令。

您可以做的另一件事是输入您想要的输入,例如:wordpress-*然后按Ctrl+ Alt+ *,现在所有匹配项都会在您的命令前自动输入。

  • 我最喜欢的方法:`printf "%s\n" wordpress-*.sql` (4认同)

wja*_*rea 12

不,rm不会通过子目录递归。

有关删除子目录中文件的方法,请参阅删除所有子目录中的匹配文件 - SuperUser

如果您担心不小心删除了重要的内容,请使用gvfs-trash(将文件发送到垃圾箱)而不是rm(永久删除文件)。