尝试重命名后可能丢失文件

尝试重命名后可能丢失文件

我刚刚创建了一个名为 的脚本myscript,并执行了 achmod +x myscript这样它就会执行。我尝试执行myscript并意识到我忘记了.sh扩展名。

因此在我的 shell 中发出以下命令bash

mv myscript *.sh

...瞧,文件不再存在了。我按名称搜索了它并获得了过去一小时内修改的所有文件的列表,但我找不到该文件。它去哪儿了?是否还有其他损坏需要修复?

答案1

您可能至少有一个目录或恰好有一个与*.sh当前目录中的模式匹配的文件。

  1. 如果它是一个目录,您会发现该目录中的文件myscript没有受到损害。例子

    mkdir dir.sh
    mv myscript *.sh
    

    这里mv命令被 shell 扩展为 bemv myscript dir.sh并且文件被移动到该目录中。

  2. 如果是文件你会发现该文件已经被被取代myscript。例子

    touch file.sh
    mv myscript *.sh
    

    这里mv命令被 shell 扩展为 be mv myscript file.sh,并且文件被重命名为file.sh,覆盖它可能包含的任何先前内容。

  3. 如果当前目录中有匹配的文件和目录,*.sh则取决于集合中的最后一项(根据您的区域设置按字母数字顺序排列)是文件还是目录。在所有情况下,shell 都会扩展通配符,例如mv myscript file1.sh file2.sh lastdir.sh扩展为 或mv myscript dir.sh file.sh

    • 如果目录是最后一个项目,则 shell 匹配的所有项目都将移动到该目录中。
    • 如果文件是最后一个项目,则该mv命令将失败并出现错误,因为无法将多个项目重命名为单个目标。 (看来你没有报告错误,mv这种情况并没有出现。)
  4. 最后,如果当前目录中没有任何内容与该模式匹配*.sh,则 shell 可能会保留该模式并将其mv作为文字传递。在这种情况下,该mv命令会将文件重命名为文字字符串*.sh,其中包含星号作为第一个字符。

我猜想,操作 #2 很可能会识别发生了什么,并且您将丢失与模式匹配的文件的原始内容*.sh

相关内容