我怎样才能恢复这些文件?
我用过: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 之类的工具;您几乎肯定无法恢复所有内容,但可能会恢复大部分内容。