如何删除名为“>”的文件?

APe*_*son 22 bash filenames quoting rm

我正在运行一个出现故障的 Python 脚本,用于sudo创建一个名为>.

我怎样才能摆脱这个文件?

当然,当我尝试时sudo rm >,我收到错误bash: syntax error near unexpected token 'newline',因为它认为我正在尝试重定向rm.

它的权限是-rw-r--r--.

ter*_*don 54

其中任何一个都应该有效:

sudo rm \>
sudo rm '>'
sudo rm ">"
sudo find . -name '>' -delete
sudo find . -name '>' -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

请注意,使用 的最后两个命令find将查找当前文件夹及其所有子文件夹中命名的所有文件或目录>。为避免这种情况,请使用 GNU find:

sudo find . -maxdepth 1 -name '>' -delete
sudo find . -maxdepth 1 -name '>' -exec rm {} +
Run Code Online (Sandbox Code Playgroud)

  • 你为什么建议`find(1)`?这里唯一的问题是需要引用 shell 元字符。有一百万零一个不同的程序可以删除文件,但使用“rm(1)”以外的任何程序只会混淆答案。 (7认同)
  • @rahul 前三个(`rm` 变体)都是一样的。这只是保护该文件名不受 shell 影响的三种不同方式。真的没有理由偏爱一个而不是另一个。 (6认同)
  • 可能值得指出的是,`find` 不像 `rm`,因为它是递归的,并且会删除当前目录树下名为 `rm` 的*每个*文件,无论多深。 (2认同)
  • 您不需要 GNU find 来避免递归。`须藤找到。!-姓名 。-prune -n​​ame '>' -exec rm {} +`。 (2认同)
  • 我同意@camh,`find` 没有添加任何内容来回答所提出的问题。 (2认同)

cuo*_*glm 18

您还可以使用 Python 将其删除:

python -c 'import os;os.remove(">")'
Run Code Online (Sandbox Code Playgroud)

使用 POSIX find

find . ! -name . -prune -type f -name '>' -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)

  • 何苦?shell 提供了很多方法来避免将 `>` 解释为输出重定向。 (3认同)
  • @alexis imo 最好尽可能多地了解完成这些简单任务的方法。如果 op 有另一个这样的问题,纯粹用 shell 更难解决,他们的工具箱里会有另一个工具来试一试 (3认同)