删除名为 '.env'$'\r' 的文件

删除名为 '.env'$'\r' 的文件

我不知道是什么创建了这个文件 - 我猜是一个糟糕的 shell 脚本。

它被称为'.env'$'\r'

我尝试过各种版本的,以及使用 打开目录、选择文件和 Shift-D 进行删除的rm技术。 这不起作用,失败了vim ./

**warning** (netrw) delete(/root/squawker/.env) failed!
NetrwMessage [RO]
"NetrwMessage"  --No lines in buffer--

我怎样才能删除这个讨厌的文件?

这是在 Ubuntu 20.04 上

答案1

在最近的 Linux 系统上(与大多数桌面发行版一样使用 GNU 工具),ls使用 shell 的引用语法打印带有奇怪字符的名称。如果'.env'$'\r'是这样ls,则文件名是.env<CR>,其中<CR>回车符是。如果您有一个带有 Windows 行结尾的 shell 脚本,运行例如whatever > .env.

这里的好处是ls那里的输出可以直接用作 shell 的输入。嗯,至少对于 Bash、ksh 和 zsh 来说,不是标准的 POSIX sh,比如 Debian/Ubuntu 的/bin/shDash。

所以尝试只用

rm -f '.env'$'\r'

当然,rm -f .env?还应该努力删除任何名为.env加任何一个字符的内容。

现在,当然,文件名也可能是字面意思,带有单引号和反斜杠。但这更难偶然实现。即便如此,rm -f *.env*应该努力删除.env名称中包含的任何内容。

答案2

如果使用 GNU find,那么您可以通过 inode 删除它。

ls -lid -- .env*

第一列中的数字是inode。如果env文件名中包含该字符串的其他文件存在,请注意您实际想要的文件是什么。

find . -inum <inode> -exec rm -f {} \;

替换<inode>为实际的索引节点号。您可以删除该-exec部分,以便在删除它之前知道它正在返回您想要的文件。

您还可以使用:

find . -inum <inode> -delete

我有时会-exec出于习惯使用该位,但其中任何一个都有效。

答案3

要求 shell 对名称中棘手的部分使用通配符,并要求rm为您记住它,这样您就不需要键入它。

$ touch '.env'$'\r'
$ ls -l .env*
-rw-rw-r-- 1 paul paul 0 May 20 16:51 '.env'$'\r'
$ rm -i .env*
rm: remove regular empty file '.env'$'\r'? y

答案4

选择讨厌的文件名的一种快速而肮脏的方法是使用 shell 的自动完成功能。

键入rm,然后按 TAB 键,直到屏幕上打印出要删除的文件。

相关内容