【问题标题】:Undoing a command in terminal?在终端中撤消命令?
【发布时间】:2015-10-17 02:06:39
【问题描述】:

所以我使用终端在我的 Mac 上的文件夹中创建和移动一些文件。

我想将 4 个文本文件 (Atom) 从名为 my_profile_project 的目录中移动到我的 moodykhedr3.github.io 文件夹中(在我的计算机上,以便之后提交并推送到 git)。

显然,我做错了。发生的事情是,它将我试图移动的所有文件重命名为moodykhedr3.github.io,这使得文件中的所有文本都相同。

我有几个 HTML 和一个样式化它们的 CSS。真的需要把这个拿回来。有什么建议?我想知道我是否可以在终端中撤消命令。

【问题讨论】:

    标签: git terminal command


    【解决方案1】:

    BLUF:是的,但非常困难,而且不是内置函数。

    让我们通过查看 mv 的手册页来分解发生了什么:

    由于 rename(2) 调用不能跨文件系统工作,因此 mv 使用 cp(1) 和 rm(1) 来完成移动。效果相当于:

           rm -f destination_path && \
           cp -pRP source_file destination && \
           rm -rf source_file
    

    我们知道 cp 有效,你有目标文件。我相信您的目标是获取原始文件,因此这是您要撤消的最后一个 rm。

    所以对于 rm - rm 实用程序删除符号链接,而不是链接引用的文件。这就是为什么 rm 文档说

    请注意,如果您使用 rm 删除文件,通常可以 恢复该文件的内容。如果您想要更多的保证 内容确实无法恢复,请考虑使用粉碎。

    从文档中我们发现 rm 实际上调用了 unlink(1) 或 unlink(2)

    当该实用程序被称为 unlink 时,只有一个参数,必须 不是 是一个目录,可以提供。在这个 sim- 中可能没有提供任何选项 ple 操作模式,它执行 unlink(2) 操作 传递参数。

    所以对于取消链接:

    unlink() 从文件系统中删除一个名称。如果那个名字是 最后一个文件链接并且没有进程打开文件文件是 删除并且它正在使用的空间可供重复使用。如果 名称是文件的最后一个链接,但任何进程仍然拥有该文件 打开文件将一直存在,直到最后一个文件描述符 引用它是关闭的。

    如果名称引用了符号链接,则删除该链接。

    如果名称引用了套接字、fifo 或设备,则其名称为 已删除,但打开对象的进程可以继续使用 它。

    有了这种理解 - 您基本上希望在重新使用该空间之前将文件重新链接到 inode 编号。这并不容易。这是类似讨论的链接。如果您成功完成此操作,您将拥有两个文件,一个是您移动到的文件,另一个是原始文件。

    https://serverfault.com/questions/168909/relinking-a-deleted-file

    【讨论】:

    • 感谢您的回复。我真的想通了!由于文件是在 atom 中打开的,我在每个文件中都按了 CTRL+Z,直到它恢复到原来的格式。然后我将所有信息复制到文本文件中,删除旧文件,然后制作新文件并保存。谢谢!
    猜你喜欢
    • 2014-10-31
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-01-04
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多