一个写得不好的脚本在我的主目录中创建了一个名为'--' (包括单引号)的目录。
当我cd到那个目录时,我会被带回我的主目录。
我想去掉那件东西,但我想不出怎么做。转义目录名中的部分或所有字符,返回No such file or directory。
Linux版本
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发布于 2021-12-14 18:28:09
在您的例子中,由于您实际上将引号作为名称的一部分,所以您可以这样做:
rm -r \'--\'或
rmdir \'--\'更常见的情况是,引号不是名称的一部分,因此您还需要处理名称看起来像一个选项(以-开头)这一事实。在这种情况下,典型的做法是:
--表示选项的结束,这样即使以-:rmdir --“‘-’-‘”开头,在--之后的任何内容都不会被解析为选项。./ (但您还需要引用名称以保护'不受shell的影响):rmdir ./“--”find:查找。-name‘’-‘’-delete请注意,以上所有内容都假定目录为空。如果不是,只需使用其中之一:
rm -r ./"'--'"或
rm -r -- "'--'"发布于 2021-12-15 07:41:02
对于带有引号、反斜杠、空格、换行符等的“有趣”名称,如其他答案所示,需要引用和/或转义。
但是,如果您试图从终端交互地使用文件名,而不是脚本,则选项卡完成对您执行引用非常有帮助。
使用您的目录名,只需键入:
rm -r \'<tab>其中<tab>是选项卡键,在键盘上字母Q的左边。我们使用\'来转义第一个单引号字符,因为它是一个特殊字符。
如果没有以单引号开头的其他文件/目录,bash将完成文件名,正确转义:
rm -r \'--\'/注意:似乎不需要添加其他答案所建议的“选项结束”序列--,因为文件名的第一个字母不是-减号。
发布于 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 ./\'--\'。
https://unix.stackexchange.com/questions/681456
复制相似问题