linux 管道命令删除不掉?

stephen@stephens-MacBook-Pro ~ % find ./ -name 'charles*'|xargs rm -rf
stephen@stephens-MacBook-Pro ~ % find ./ -name 'charles*'
.//Library/Application Support/Charles/ca/charles-proxy-ssl-proxying-certificate.pem
.//Library/Application Support/Charles/ca/charles-proxy-ssl-proxying-certificate.cer
.//Library/Application Support/Charles/backup/charles-4.6.4-backup.config
.//Library/Application Support/Charles/backup/charles-4.6.5-backup.config
.//Library/Application Support/Charles/backup/charles-4.6.1-backup.config
.//Library/Application Support/Charles/backup/charles-4.6.2-backup.config
.//Downloads/charles-proxy-4.6.5 (1).dmg
stephen@stephens-MacBook-Pro ~ % find ./ -name 'charles*'|xargs rm -rf
stephen@stephens-MacBook-Pro ~ % find ./ -name 'charles*'
.//Library/Application Support/Charles/ca/charles-proxy-ssl-proxying-certificate.pem
.//Library/Application Support/Charles/ca/charles-proxy-ssl-proxying-certificate.cer
.//Library/Application Support/Charles/backup/charles-4.6.4-backup.config
.//Library/Application Support/Charles/backup/charles-4.6.5-backup.config
.//Library/Application Support/Charles/backup/charles-4.6.1-backup.config
.//Library/Application Support/Charles/backup/charles-4.6.2-backup.config
.//Downloads/charles-proxy-4.6.5 (1).dmg

阅读 1.1k
avatarAI BotBETA

从你的描述来看,你正在尝试使用 find ./ -name 'charles*'|xargs rm -rf 命令来删除所有名字以 "charles" 开头的文件和文件夹。然而,你发现这些文件并未被删除。

在这种情况下,可能有以下几种原因:

  1. 你可能没有足够的权限删除这些文件。你可以尝试使用 sudo 前缀来提升权限,如 sudo find ./ -name 'charles*'|xargs rm -rf。输入密码后,这应该会删除你列出的文件和文件夹。
  2. 文件可能正在被使用,因此不能被删除。你可以尝试关闭任何可能正在使用这些文件的程序,然后再试一次。
  3. 你可能已经删除了文件或文件夹,但是由于某种原因(例如,文件被移动到回收站),它们仍然显示在你的 find 命令结果中。你可以尝试查看你的回收站,看看是否有任何文件或文件夹在那里。

如果你尝试了以上建议但仍然不能删除文件,我建议你查看是否有任何安全软件或权限管理工具(如 AppArmor 或SELinux)阻止了你的操作。你也可以尝试使用另一种操作系统或环境来测试是否可以在那里删除文件。

3 个回答

xargs 是默认是空白分隔的。你这些路径里都有空格,所以都被拆成多个了。

Linux 下, find 可以以 \0 分隔(-print0),xargs 也可以(-0)。两者配合着用就没这个问题。

Mac 的 find 不一样,自己去查一下吧。

你这哪里是Linux的find,分明是MacOS下的find好吧,两者不一样,甚至命令行参数都不完全一样,你得自己去看MacOS的man手册找到你的答案

因为文件名字和路径里面带了空格
xargs解析的时候,会把空格两边的参数传给rm,rm拿到的就是两个参数。

改成这样 xargs -I {} rm -rf {}

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题