拉出一个名为 ~ 的文件

man*_*ang 4 filenames quoting rename

所以我从 aMule 下载了一张音乐专辑,它位于.aMule/Incoming目录中。我尝试使用以下命令将其移出:

 mv albumName.rar ~
Run Code Online (Sandbox Code Playgroud)

这给我留下了一个无法重命名的文件~.aMule/Incoming因为波浪号是为主目录保留的。我知道我可以通过显示隐藏文件通过 Nautilus 访问它。如何在终端中将其拉出?

更新 这是现在的样子

   manuzhang@manuzhang-R458-R457:~/.aMule/Incoming$ ls -l
   total 328
   -rw-r--r-- 1 manuzhang manuzhang 297266 2012-03-19 12:07 ?
   -rw-r--r-- 1 manuzhang manuzhang  34479 2011-10-11 19:51 [kat.ph]friends.season.1.with.english.subtitles.torrent
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 5

mv \~ ~/albumName.rar
mv '~' ~/albumName.rar
mv ./~ ~/albumName.rar
Run Code Online (Sandbox Code Playgroud)

您始终可以通过在其前面放置反斜杠来保护在 shell 中具有特殊含义的字符。

您始终可以通过将序列放在单引号内来告诉 shell 从字面上解释序列。唯一不能放入此类文字串中的字符是单引号本身,因为它表示文字串的结尾。你可以'\''改用; 它的意思是“文字的结尾,字符',文字的开始”,但您可以将其视为将单引号放入单引号内的文字字符串中的一种奇怪方式。

该字符~仅在路径的开头是特殊的,因此如果放置目录指示,~将是该目录中的文件名。

请注意,如果文件名以 开头-,则只有这三种方法中的最后一种有效。这是因为-它不是 shell 所特有的;它对命令有特殊意义:它表示一个选项。另一种-防止这种特殊含义的方法是将特殊选项放在--它之前:--在命令行上指示选项的结尾,只有文件名(或其他非选项参数)可以在它之后。

另请注意,您显示的命令应该已将文件复制到您的主目录,因为该~字符应该已被 shell 解释过。您可能输入错误并创建了一个未调用的文件~。运行ls -qls -Q以查看文件名是否包含不可打印的字符。如果这没有提供任何视觉指示,请尝试ls | od -t o1,它将显示文件名中每个字节的八进制代码。在 ksh、bash 或 zsh 中,您可以$'\123'在命令行中使用八进制代码来指定字符。或者,您可以找到与文件匹配的模式。例如,如果您确定文件名的长度为 3,并且长度为 2 的其他文件只有foobar,则可以使用

mv ./[^bf]?? ~/albumName.rar
Run Code Online (Sandbox Code Playgroud)

如果您愿意使用鼠标并且名称由您不知道如何键入的可打印字符组成:从ls.

  • @manuzhang 这不是 ASCII 波浪号,而是 U+FF5E FULLWIDTH TILDE,可能是用中文或日文输入法输入的。要么使用相同的输入法,要么从 `ls` 输出中复制粘贴字符。 (3认同)