AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 47003
Accepted
Kate Bertelsen
Kate Bertelsen
Asked: 2009-07-29 06:37:35 +0800 CST2009-07-29 06:37:35 +0800 CST 2009-07-29 06:37:35 +0800 CST

删除名称中带有连字符的 UNIX 目录

  • 772

通过我的愚蠢操作,我不小心创建了一个名为(例如)-A 的目录,并最终用文件填充它。

我想删除所说的目录。我试过了:

rmdir -- -A

但它随后告诉我该目录中仍有文件。而且我不知道如何 cd 进入目录以删除所述文件。

我应该怎么做才能摆脱这个麻烦的目录?

unix unix-shell
  • 9 9 个回答
  • 7295 Views

9 个回答

  • Voted
  1. Best Answer
    Moo
    2009-07-29T06:46:32+08:002009-07-29T06:46:32+08:00

    在每个命令上使用 --。

    $ ls -la
    total 32
    drwxr-xr-x  3 richard  richard  512 Jul 28 15:44 .
    drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
    $ mkdir -- -A
    $ ls -la
    total 36
    drwxr-xr-x  2 richard  richard  512 Jul 28 15:44 -A
    drwxr-xr-x  4 richard  richard  512 Jul 28 15:44 .
    drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
    $ cd -- -A
    $ ls
    $ pwd
    /home/richard/-A
    $ cd ..
    $ rm -rf -- -A
    $ ls -la
    total 32
    drwxr-xr-x  3 richard  richard  512 Jul 28 15:44 .
    drwxr-xr-x  3 root     wheel    512 Jul  6 17:10 ..
    
    • 29
  2. chris
    2009-07-29T07:06:11+08:002009-07-29T07:06:11+08:00

    您可以将 ./ 放在文件前面——这样 rm 或 rmdir 不会表现得好像文件名是一个选项标志。

    您还可以发出选项 -- 它告诉 rm 将 -- 之后的所有内容都视为文件名,并且它不应再处理任何选项。可能有一些时髦的旧版本 rm 不遵守这一点,尽管这些天我的古董 unixes 动物园已经变得非常小,所以我不能告诉你哪些版本或者是否有不理解的版本——。

    无论如何,您应该养成在删除时将 ./ 放在名称前面的习惯——您永远不知道目录中是否存在 -r 或 -rf 命名文件。您可以说您应该始终使用 -- 但我发现 ./ 更自然,因为它明确表示“我想删除此目录中的文件,而不是任何 * 发生 glob 的内容”

    • 11
  3. David Mackintosh
    2009-07-29T07:35:42+08:002009-07-29T07:35:42+08:00

    重命名然后正常处理:

    $ mv -- -A foo
    $ find foo
    $ rm -rf foo
    
    • 4
  4. David Pashley
    2009-07-29T07:16:21+08:002009-07-29T07:16:21+08:00

    rmdir 不会删除其中包含任何内容的目录。“rm -rf”会。rmdir 比“rm -rf”安全得多。Moo 的回答可能仍然是最好的。

    • 2
  5. q0987
    2017-09-09T08:05:29+08:002017-09-09T08:05:29+08:00
    rm -fr ./-A
    

    上面的命令对我有用。

    • 1
  6. baumgart
    2009-07-29T10:46:52+08:002009-07-29T10:46:52+08:00

    另一种方法是通过 inode 删除(这适用于具有其他字符的文件/目录,这些字符仅 rm 难以删除)。

    bash-3.2$ ls -i
    4905937 angry-1.gif
    5174052 hermes
    5172770 make_hosts.pl
    bash-3.2$ find . -inum 5172770 -exec rm -f {} \;
    bash-3.2$ ls -i
    4905937 angry-1.gif
    5174052 hermes
    bash-3.2$
    
    • 0
  7. ThorstenS
    2009-07-29T11:51:02+08:002009-07-29T11:51:02+08:00

    find 可以这样删除目录:

    find . -type d -iname '-A' -delete
    
    • 0
  8. user3114790
    2020-06-28T12:02:24+08:002020-06-28T12:02:24+08:00

    我遇到过类似的情况,我不小心创建了 -p 文件夹,因为我的团队成员提供的创建目录的脚本在 -p 部分包含特殊字符。

    等等:mkdir –p /home/web/country/pl/temp

    mkdir: 无法创建目录`/home/web/country/pl/temp': 没有这样的文件或目录

    我发现在目录 /home/web/country/ 下创建了 -p 目录

    drwxr-x--- 2 web web 4096 Jun 20 19:22 –p/

    我尝试使用上述选项 rm -rf -- -p 删除

    它不起作用,文件夹仍然存在(可能是因为 -p 是特殊字符/非 ascii)

    我设法使用以下命令删除此文件夹

    rm -r *p

    由于我没有任何其他名称中带有 *p 的文件夹,所以我觉得尝试这个可以节省。

    • 0
  9. Andres Salgado
    2019-09-17T16:41:14+08:002019-09-17T16:41:14+08:00

    我试图删除一个名为-p. @Moo 的答案实现了我无法做到的rm ./-p,在谷歌搜索后,它在许多网页中广泛可用。

    另一种方法是使用 inode 编号。我使用了这里描述的方法:

    https://www.cyberciti.biz/tips/delete-remove-files-with-inode-number.html

    简而言之,使用以下命令:

    1. 显示文件或目录的inode 编号。
    ls -il
    
    1. 使用带有文件或目录参数的find命令。-exec rm -irf-exec rm -ifdr
    find . -inum <inode-number> -exec rm -irf {} \;
    find . -inum <inode-number> -exec rm -irdf {} \;
    

    确保-f在标志内使用,否则 bash 会抱怨找不到目录或文件。

    测试:

    Distributor ID: Ubuntu
    Description:    Ubuntu 16.04.6 LTS
    Release:        16.04
    Codename:       xenial
    
    • -1

相关问题

  • Windows 有符号链接吗?

  • 控制 UNIX 目录内容用户组所有权

  • 在命令行上从 csv 文件中过滤带有空格字符的字段

  • 如何将 VAR 从子 shell 导出到父 shell?

  • 查找文件大小(以 MB 为单位)

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve