在命令提示符中使用移动命令将文件重命名为 ~file。文件去哪儿了?

在命令提示符中使用移动命令将文件重命名为 ~file。文件去哪儿了?

需要澄清的是,这是在运行 wsl 的 Windows 系统中。命令是在 Windows cmd.exe 中运行的。

因此,我在命令提示符下工作,使用 git 执行一些操作并在 cmd.exe 和 wsl bash 之间切换。之后,我想将名为“sh”的脚本文件移动到我的 wsl2 ubuntu 发行版的主目录中。

因此,我没有多想(在命令提示符中,而不是 bash),就运行了这个命令

mv sh ~sh

我现在认识到我犯了两个错误。

  1. 由于我没有使用 bash,所以 ~/ 不是有效路径
  2. 即使我在 bash 中,我也忘记了 ~ 和 sh 之间的 /

本质上,我的问题是我的文件去哪儿了?

但是也为什么该命令不将文件 sh 重命名为 ~sh?

我已经在命令提示符和 wsl bash 中的目录中运行了 ls -a 和 dir。据我所知,该文件不仅仅是命名为 ~sh 并留在目录中。另外,为了保险起见,我搜索了我的 ubuntu 主文件夹,但找不到该文件。

剧本其实并不重要,但我更好奇它会走向何方。

进一步挖掘,运行:where mv

返回:C:\Program Files (x86)\WinAVR-20100110\utils\bin\mv.exe 这使我相信我没有运行经典的 linux mv 命令,而mv --help只是描述了 bash mv 命令“将 SOURCE 重命名为 Dest...”。

唯一可能相关的部分是:

备份后缀为“~”,除非使用 --suffix 或 SIMPLE_BACKUP_SUFFIX 设置。版本控制方法可以通过 --backup 选项或 VERSION_CONTROL 环境变量选择。以下是值:

但这似乎并不适用于这种用法。

我已经查看过该文件是否只是被隐藏,并且还关闭了该文件夹的“隐藏系统保护的文件”。

编辑(从评论中复制):

跑步:

mv -i -v example.txt ~sh/example.txt

返回:

mv: cannot move `example.txt' to `~sh/example.txt'

跑步:

mv -i -v example.txt ~sh

返回:

example.txt' -> `/example.txt'

答案1

除了~表示您自己的主目录之外,bash 和其他 Linux shell 还支持~someuser引用该用户的主目录。

尽管您没有在 bash 中运行 mv,但大多数此类“Linux-utils-on-Windows”移植都会自动调用兼容层,为其处理类似 shell 的命令行处理。(它们已经需要它来处理通配符/通配符。)

因此,无论您调用哪个版本的 mv,都会认为有一个名为“sh”的系统用户(根据其 /etc/passwd 文件),并且已将该文件移动到该用户的主目录中。

尝试mv -v -i someotherfile ~sh/test并希望能够说服它透露其使用的完整路径。

相关内容