我打错了:
$ 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
^V
(ctrl+ v)作为下一次按键的转义序列,插入相关值而不是采取通常相关的任何操作。
利用这个,^V^C
(ctrl+ v,ctrl+ 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/
然后你只要按回车键,它就会执行你想要的操作。