我使用 mv ./*/* 来展平 ntfs 文件系统上的目录,而无需在命令末尾添加 . ,现在我的所有文件都消失了

我使用 mv ./*/* 来展平 ntfs 文件系统上的目录,而无需在命令末尾添加 . ,现在我的所有文件都消失了

我怎样才能恢复这些文件?

我用过:mv ./*/*当它应该是mv ./*/* .现在时,我的所有文件都消失了。

答案1

我不认为你的文件丢失了;这应该是发生的:

假设以下结构(目录标记为/

.
|-- a/
|   |-- a1
|   |-- a2
|   |-- a3
|   `-- a4
|-- b/
|   |-- b1
|   |-- b2
|   |-- b3
|   `-- b4
|-- c/
`-- d/
    |-- d1/
    |   `-- foo
    |-- d2/
    |   `-- foo
    |-- d3/
    |   `-- foo
    `-- d4/

首先,请记住,Un*x 不会mv扩展通配符,但是shell

  • 如果你输入,mv ./*/* .它会被扩展为, mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 . 并且 mv 会执行你想要的操作,因为目标(即最后的参数)是一个目录。所有内容(即作为参数给出的所有文件/目录除了将文件(最后一个)移至当前目录(.)。
  • 如果你输入 ,mv ./*/* this_is_a_file它将被扩展为mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4 this_is_a_file,而 mv 拒绝对 进行任何操作mv: target „this_is_a_file“ is not a directory。没有任何内容被覆盖或移动。

现在,对于你的命令:mv ./*/*展开为mv /a/a1 ./a/a2 ./a/a3 ./a/a4 ./b/b1 ./b/b2 ./b/b3 ./b/b4 ./d/d1 ./d/d2 ./d/d3 ./d/d4。正如你在我的例子中看到的,最后一个参数是一个目录,这对于 mv 来说很好,所有内容都会移动到其中——最终你会得到那棵树:

.
|-- a/
|-- b/
|-- c/
`-- d/
    `-- d4/
        |-- a1
        |-- a2
        |-- a3
        |-- a4
        |-- b1
        |-- b2
        |-- b3
        |-- b4
        |-- d1/
        |   `-- foo
        |-- d2/
        |   `-- foo
        `-- d3/
            `-- foo

我想你也遇到过类似的情况,所以我相信你的文件并没有消失,而只是被移动到了更深的层次结构中。

答案2

你确定他们已经走了吗?

我相信 shell 会扩展./*/*为文件和目录列表。如果列表中的最后一项恰好是目录,则命令mv会将其用作其目标。

答案3

如果您先备份了,请从备份中恢复。否则,请尝试使用 NTFS Undelete 之类的工具;您几乎肯定无法恢复所有内容,但可能会恢复大部分内容。

相关内容