我不知道是什么创建了这个文件 - 我猜是一个糟糕的 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/sh
Dash。
所以尝试只用
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 键,直到屏幕上打印出要删除的文件。