首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除名称为“-”的目录(单引号是名称的一部分)

问如何删除名称为“-”的目录(单引号是名称的一部分)
EN

Unix & Linux用户
提问于 2021-12-14 17:41:01
回答 3查看 3.1K关注 0票数 20

一个写得不好的脚本在我的主目录中创建了一个名为'--' (包括单引号)的目录。

当我cd到那个目录时,我会被带回我的主目录。

我想去掉那件东西,但我想不出怎么做。转义目录名中的部分或所有字符,返回No such file or directory。

Linux版本

代码语言:javascript
复制
Linux version 5.11.0-1022-aws (buildd@lgw01-amd64-036) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #23~20.04.1-Ubuntu SMP Mon Nov 15 14:03:19 UTC 2021
EN

回答 3

Unix & Linux用户

发布于 2021-12-14 18:28:09

在您的例子中,由于您实际上将引号作为名称的一部分,所以您可以这样做:

代码语言:javascript
复制
rm -r \'--\'

或

代码语言:javascript
复制
rmdir \'--\'

更常见的情况是,引号不是名称的一部分,因此您还需要处理名称看起来像一个选项(以-开头)这一事实。在这种情况下,典型的做法是:

  1. 使用--表示选项的结束,这样即使以-:rmdir --“‘-’-‘”开头,在--之后的任何内容都不会被解析为选项。
  2. 使用完整路径或只使用./ (但您还需要引用名称以保护'不受shell的影响):rmdir ./“--”
  3. 使用GNU find:查找。-name‘’-‘’-delete
  4. 再用点别的。就像Perl: perl -e“rmdir(\”--‘\“)

请注意,以上所有内容都假定目录为空。如果不是,只需使用其中之一:

代码语言:javascript
复制
rm -r ./"'--'"

或

代码语言:javascript
复制
rm -r -- "'--'"
票数 44
EN

Unix & Linux用户

发布于 2021-12-15 07:41:02

对于带有引号、反斜杠、空格、换行符等的“有趣”名称,如其他答案所示,需要引用和/或转义。

但是,如果您试图从终端交互地使用文件名,而不是脚本,则选项卡完成对您执行引用非常有帮助。

使用您的目录名,只需键入:

代码语言:javascript
复制
rm -r \'<tab>

其中<tab>是选项卡键,在键盘上字母Q的左边。我们使用\'来转义第一个单引号字符,因为它是一个特殊字符。

如果没有以单引号开头的其他文件/目录,bash将完成文件名,正确转义:

代码语言:javascript
复制
rm -r \'--\'/

注意:似乎不需要添加其他答案所建议的“选项结束”序列--,因为文件名的第一个字母不是-减号。

票数 28
EN

Unix & Linux用户

发布于 2021-12-18 00:02:15

首先:不要在尝试做这样的事情时使用无条件和破坏性的删除。如果你搞错了,它可以删除很多东西。使用rm -i <name>或rmdir <name>

第二个事实是,cd将您带回到主目录,这意味着您正在编写cd '--',将其转换为cd --,然后将--视为选项参数的结尾。你可以试试cd -- --或cd ./--。文件名开头的./将防止将其解释为选项。

第三:完成命令是你的朋友。在bash或tcsh (可能还有其他几个shell)中,如果将第一个或两个字符就位并按TAB,它将填充其余字符或列出选择。尝试rmdir ./\'或rmdir ./-,无论是哪种方式,后面都跟着一个选项卡。如果它给了您正确的名称,rmdir应该会成功。

第四:您所看到的单引号可能是名称的一部分,也可能是您如何列出文件的工件。因此,您的最后命令可能应该是rmdir ./--或rmdir ./\'--\'。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/681456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档