无法删除具有这些名称的文件

无法删除具有这些名称的文件

我正在用 C 语言编写一个文件管理程序,不小心创建了两个无法删除的文件。

文件一: ''$'\n'

文件2:'b.txt'$'\n'

键入rm并敲击tab两次甚至不会显示它们。

我该如何删除它们?

编辑:

输出ls -la

-rw-r--r-- 1 pi pi 0 Feb 7 04:12 ''$'\n'
-rw-r--r-- 1 pi pi 0 Feb 7 00:48 'b.txt'$'\n'

答案1

这可能应该'b.txt'$'\n'在后者中,并带有最后的单引号。

这看起来像带有引用样式的 GNU ls 的输出shell-escape。 GNU ls 的最新版本默认使用一些此类引用。您可以通过运行ls -l --quoting-style=shell-escape查看是否给出相同的输出来验证这一点。顾名思义,输出像 shell 一样被引用,因此它可以用作 shell 的输入。因此,只需将引用/转义的输出复制粘贴ls到 Bash就可以删除其中一个或两个文件:

ls -l ''$'\n' 'b.txt'$'\n

当然,rm ...在您验证您获得了正确的文件之后。

就其价值而言,第一个文件名只是一个单独的换行符(由于某种原因,转义会添加前导的空''),第二个文件名是b.txt最后一个换行符。

答案2

输入“rmls 显示的文件名" 删除文件,例如

rm ''$'\n'

背景:

  1. 您的文件名附加了一个换行符(或者,在 的情况下''$'\n',甚至仅包含一个换行符)
  2. 输入ls -N以获得不同的(传统)视图
  3. 关于$'\n'表示换行符的 ,请参见“ANSI-C 引用”(http://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
  4. 关于 ls 的不同输出格式,请参见“GNU Coreutils - 引用文件名”(https://www.gnu.org/software/coreutils/quotes.html),或手册页 ls(1) ( man 1 ls) - 查找“引用”
  5. 看来,shell 制表符补全无法正确处理包含换行符的文件名,尤其是''$'\n'
  6. 以换行符开头的文件名通过在ls前面添加两个单引号进行特殊处理 - 可能是一个错误

相关内容