rm命令可以删除多个文件/目录,如果您将它们作为列表传递给它.
例如:rm test1.txt test2.txt myApp将删除所有三个名称为的文件:
test1.txt
test2.txt
myApp
此外,您使用的rm命令的标志在许多愚蠢行为中很常见.
rm -f – 强制删除文件而不询问或确认
rm -r – 递归到所有子目录并删除其所有内容和子目录
所以,假设您在/ home / user中,目录结构如下所示:
/home/user
|->dir1
|->dir2
`->file1.txt
ls -l命令将提供包含“dir1 dir2 file1.txt”的列表,以及命令ls -l |的结果. xargs rm -rf将如下所示:
rm -rf dir1 dir2 file1.txt
如果我们使用上面的示例扩展您的原始问题,那么传递给系统的最终命令将变为:
rm -rf di1 dir2 file1.txt bark.*
因此,当前目录中的所有内容都会被删除,因此bark.*是多余的(您有效地告诉机器无论如何都要销毁当前目录中的所有内容).
我想你要做的是删除当前目录中的所有文件以及以bark开头的所有子目录(recurse).要做到这一点,你只需要这样做:
找到-iname bark.* | xargs rm
上面的命令意味着“查找此目录和子目录中的所有文件,忽略大写/小写/ mIxEdCaSe,以字符”bark.“开头,并删除它们”.如果您有拼写错误,这仍然可能是一个错误的命令,所以可以肯定的是,您应该在执行批量删除之前进行测试.
将来,首先要执行以下操作以获取您将首先删除的所有文件的列表,以确认它们是您要删除的文件.
找到-iname bark.* | xargs回声
然后,如果您确定,请通过删除它们
找到-iname bark.* | xargs rm
希望这可以帮助.
作为一个幽默的说明,这里可以找到最着名的“rm -rf”实例之一:
https://github.com/MrMEEE/bumblebee-Old-and-abbandoned/commit/a047be85247755cdbe0acce6f1dafc8beb84f2ac
自动脚本运行类似rm -rf /usr/local / ………,但由于意外插入空格,命令变为rm -rf /usr/local / ……,所以这实际上意味着“删除所有以usr或local开头的根文件夹”,有效地破坏了使用它的任何人的系统.我觉得这个开发人员不好.
您可以通过引用字符串来避免这些类型的错误,即:
rm -rf“/usr/local / ….”会提供错误消息并避免此错误,因为引号意味着它们之间的所有内容都是完整路径,而不是单独路径/文件的列表(即:您告诉rm文件/文件夹的名称中有一个SPACE字符).