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

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

概述我是unix的新手.我运行了以下命令.ls -l | xargs rm -rf bark.* 以上命令删除了文件夹中的每个目录.谁能解释我为什么?最佳答案ls -l命令给出了当前present-working-directory(PWD)中所有子目录的列表.rm命令可以删除多个文件/目录,如果您将它们作为列表传递给它.例如:rm test1.txt test

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

ls -l | xargs rm -rf bark.*

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

谁能解释我为什么?

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

rm命令可以删除多个文件/目录,如果您将它们作为列表传递给它.

例如:rm test1.txt test2.txt myApp将删除所有三个名称为的文件:

test1.txttest2.txtmyApp

此外,您使用的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 – Unix命令删除了每个目录,即使没有指定全部内容,希望文章能够帮你解决linux – Unix命令删除了每个目录,即使没有指定所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:http://outofmemory.cn/yw/1047925.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存