我刚刚创建了一个名为 的脚本myscript
,并chmod +x myscript
执行了它。我尝试执行myscript
并意识到我忘记了.sh
扩展名。
所以在我的 shell 中发出了以下命令bash
:
mv myscript *.sh
...瞧,文件已经不存在了。我按名称搜索了所有文件,并获得了过去一小时内修改过的所有文件的列表,但我找不到该文件。它去哪儿了?是否还有其他损坏需要恢复?
我刚刚创建了一个名为 的脚本myscript
,并chmod +x myscript
执行了它。我尝试执行myscript
并意识到我忘记了.sh
扩展名。
所以在我的 shell 中发出了以下命令bash
:
mv myscript *.sh
...瞧,文件已经不存在了。我按名称搜索了所有文件,并获得了过去一小时内修改过的所有文件的列表,但我找不到该文件。它去哪儿了?是否还有其他损坏需要恢复?
您可能至少有一个目录或恰好有一个文件与
*.sh
当前目录中的模式匹配。如果它是一个目录,您将在该目录中找到该文件
myscript
,否则不会受到损害。例子这里的
mv
命令被 shell 扩展为 bemv myscript dir.sh
,文件被移动到那个目录中。如果它是一个文件,你会发现该文件已被替换为
myscript
. 例子在这里
mv
命令被 shell 扩展为 bemv myscript file.sh
并且文件被重命名为file.sh
,覆盖它可能包含的任何以前的内容。如果当前目录中有文件和目录匹配
*.sh
,则取决于集合中的最后一项(根据您的语言环境按字母数字顺序排列)是文件还是目录。在所有情况下,shell 都会扩展通配符,例如,扩展为mv myscript file1.sh file2.sh lastdir.sh
或mv myscript dir.sh file.sh
。mv
命令将失败并出现错误,因为无法将多个项目重命名为单个目标。(看你没有报错,mv
这种情况并没有出现。)最后,如果当前目录中没有匹配模式的内容
*.sh
,shell 可能会单独保留模式并将其mv
作为文字传递给。在这种情况下,该mv
命令会将文件重命名为文字字符串*.sh
,包括星号作为第一个字符。我猜想这很可能是动作 #2 确定发生了什么,您将丢失与 pattern 匹配的文件的原始内容
*.sh
。