0 mv
我刚刚创建了一个名为 的脚本myscript
,并执行了 achmod +x myscript
这样它就会执行。我尝试执行myscript
并意识到我忘记了.sh
扩展名。
因此在我的 shell 中发出以下命令bash
:
mv myscript *.sh
Run Code Online (Sandbox Code Playgroud)
...瞧,文件不再存在了。我按名称搜索了它并获得了过去一小时内修改的所有文件的列表,但我找不到该文件。它去哪儿了?是否还有其他损坏需要修复?
您可能至少有一个目录或恰好有一个*.sh
与当前目录中的模式匹配的文件。
如果它是一个目录,您会发现该目录中的文件myscript
没有受到损害。例子
mkdir dir.sh
mv myscript *.sh
Run Code Online (Sandbox Code Playgroud)
这里mv
命令被 shell 扩展为 bemv myscript dir.sh
并且文件被移动到该目录中。
如果是文件你会发现该文件已被替换为myscript
. 例子
touch file.sh
mv myscript *.sh
Run Code Online (Sandbox Code Playgroud)
这里mv
命令被 shell 扩展为 be ,mv 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 很可能会识别发生了什么,并且您将丢失与模式匹配的文件的原始内容*.sh
。
归档时间: |
|
查看次数: |
72 次 |
最近记录: |