linux – Unix命令删除了每个目录,即使没有指定

前端之家收集整理的这篇文章主要介绍了linux – Unix命令删除了每个目录,即使没有指定前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我是unix的新手.我运行了以下命令.

ls -l | xargs rm -rf bark.*

以上命令删除文件夹中的每个目录.

谁能解释我为什么?

最佳答案
ls -l命令给出了当前present-working-directory(PWD)中所有子目录的列表.

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字符).

猜你在找的Linux相关文章