我在 UNIX 环境中工作,我注意到在我的工作目录中(距离我的 UNIX 主目录很远)有一个~
.
现在,曾经,我rm -rf ~
从工作目录中执行此操作,最终完全删除了我的主目录,并且不得不让 IT 介入。
我不想再这样做了。同时,我想知道:
为什么
~
在我的工作目录中创建?是不是保存时手指滑倒了(:w!
但是会发生什么:w~
?!!)在签入之前,有一个脚本会查找 p4 不知道的额外文件或文件夹,因此这
~
可能会导致问题。如何~
从我的工作目录中删除它,同时不删除我的主目录?
我确实有一个名为的备份命令del
,我使用它来代替rm -rf
.它只是将东西放在临时位置。我可以使用它并摆脱~
,但我更感兴趣的是知道为什么会发生这种情况,以及如何删除它。
答案1
要么引用它:
rm -i '~'
rm -i "~"
rm -i \~
或者通过路径引用它,而不仅仅是基本名称:
rm -i ./~
rm -i /path/to/~
SOME$PATH
请注意,尽管这是一个看起来很有趣的单字符名称,但从概念上讲,这与您创建一个名为的文件没有什么不同
touch 'SOME$PATH'
并尝试通过执行以下操作来删除它:
rm -i SOME$PATH
(警告:变量 SOME$PATH
出于示例目的,此处未引用。通常它会用引号引起来 'SOME$PATH'
)
在这两种情况下,shell 都会扩展您提供的名称,您需要防止这种情况发生。
另外:不要用来rm -rf
删除文件!其全部目的rm -r
是告诉rm
您可以删除目录。如果您不想在尝试删除文件时意外删除整个目录,请不要习惯性地通过-r
!
答案2
在上下文中单独使用波浪号时,ls ~
会将您的主目录列出为 ~ 是您的主目录的快捷方式。如果您这样做了ls ~brown
,那么您将列出 Brown 的主目录的内容。
除非另有说明,VIM 将创建已更改文件的备份副本:myFile myFile~。
这种行为很好,因为它创建了一个备份,但如果您不需要它,请添加到您的 .vimrc 文件中:设置不备份(我刚刚使用 访问过vi ~/.vimrc
)。
当然,正如其他人所说,如果您有一个名为 ~ 的文件,那么只需将 char 转义为 \~
me 217 % vi this (saved as :w~)
me 218 % ls
this ~
me 219 % cat \~
kfdkdfk
me 220 % \rm \~
me 221 % ls
this
答案3
这可能会受到打字错误的影响。如果您的TERM=xterm
配置与我的配置类似,那么几乎键盘上的每个功能键都会发送转义序列,例如...
infocmp -1 | grep -n \~ | tail -n3
138: kich1=\E[2~,
141: knp=\E[6~,
142: kpp=\E[5~,
超过一半的输出infocmp -1
包含~
波形符在我的机器上逃脱 - 我不知道他们中的大多数人做了什么。我确实知道zsh
在大多数情况下至少实际上吃掉了字符串的转义部分 - 并且只留下了~
波形符。
例如,echo
然后输入<space>
然后F6
和<return>
印刷...
/home/mikeserv
发送的实际转义序列是...
kf6=\E[17~
有趣的是,还有其他包含>
字符的转义序列。
infocmp -1 | grep \>
is2=\E[!p\E[?3;4l\E[4l\E>,
rmkx=\E[?1l\E>,
rs2=\E[!p\E[?3;4l\E[4l\E>,
这些是常用的转义符 - 重置和初始化字符串。不难想象,当交互式 shell 等待输入时,键盘掉落或某种按钮按下可能会导致~
整个文件系统中出现随机截断的文件。至少,它偶尔会出现在我的身上。