FreeBSD:目录名为 ^C(真的!) - 如何删除?

FreeBSD:目录名为 ^C(真的!) - 如何删除?

我打错了:

$ history
169 9:34    la /usr/local/etc/
170 9:35    sudo mkdir ^C
171 9:36    sudo mkdir /usr/local/etc/dnsmasq.d

现在我有一个名为 ^C (ctrl+C) 的文件!!当我使用时,ls我只看到一个问号(可能是由于语言环境?)

% ls -al
total 60
drwxr-xr-x  2 root   wheel    512 Jan 21 09:35 ?        <- this one
drwxr-xr-x  5 admin  wheel    512 Jan 21 16:24 .
drwxr-xr-x  3 root   wheel    512 Jan 20 14:29 ..
-rw-r--r--  1 admin  nobody  1114 Jan 20 19:10 .cshrc
-rw-------  1 admin  wheel   6002 Jan 21 15:27 .history
-rw-r--r--  1 admin  nobody   182 Jan 20 14:29 .login
-rw-r--r--  1 admin  nobody    91 Jan 20 14:29 .login_conf
-rw-------  1 admin  nobody   301 Jan 20 14:29 .mail_aliases
-rw-r--r--  1 admin  nobody   271 Jan 20 19:04 .mailrc
-rw-r--r--  1 admin  nobody   726 Jan 20 19:05 .profile
-rw-------  1 admin  nobody   212 Jan 20 14:29 .rhosts
-rw-r--r--  1 admin  nobody   911 Jan 20 19:06 .shrc
drwx------  2 admin  nobody   512 Jan 20 15:05 .ssh
drwxr-xr-x  2 admin  wheel    512 Jan 20 19:08 bin

% ls -i
3611537 ?   3611534 bin

我想删除此文件。我尝试mv使用 tab 补全功能,结果显示:

% mv
^C/  bin/

显然我无法输入 ^C :-/ 我该如何删除此文件?

答案1

^Vctrl+ v)作为下一次按键的转义序列,插入相关值而不是采取通常相关的任何操作。

利用这个,^V^Cctrl+ vctrl+ c)应该可以在终端中输入困难的文件名。

答案2

您也可以通过 inode 删除文件:

$ ls -i1
290742 foo
293246 ^C
$ find . -inum 293246 -delete

无论你做什么,看在上帝的份上,不要把以下事情放在-delete前面-inum

$ touch foo bar baz quux
$ find . -name '*u*' -delete
$ ls
bar baz foo
$ find . -delete -name 'b*'
find: `./baz': No such file or directory
find: `./bar': No such file or directory
$ ls
$ 

恭喜你,你刚刚被消灭了全部您的文件。find参数顺序很重要

答案3

另一个选择是使用rm -ri ./*rm在删除任何文件和目录之前会询问您,因此您只需回复y“坏”文件以及n所有其他文件。

实际上,就您而言,您甚至可以通过执行来减少所需的回复次数rm -ri ./?,因为您的“坏”文件只有一个字符长。

答案4

在这种情况下,我们通常很容易想出一个通配符模式与相关文件匹配。

就您而言,这将很简单?(将所有文件名与一个字符精确匹配)。

只要检查它是否真的符合你的要求:

ls -ld ?

然后删除目录:

rmdir ?

您还可以将其与Tab 补全。您可以输入

rmdir ?

然后按 Tab 键,在 bash 中它将被替换为

rmdir ^C/

然后你只要按回车键,它就会执行你想要的操作。

相关内容