是否有可能以某种方式撤消 mv 命令的结果?

是否有可能以某种方式撤消 mv 命令的结果?

问题就在这里。我在一个目录中有一堆文件。然后我在该目录中创建了另一个目录。然后我拼凑了这个命令:

find . -maxdepth 1 -type f -exec mv {} ./1 \;

此命令本来应该将目录中的所有文件移动到新创建的目录中,但我没有提供目录的名称,而是输入了1,如代码片段所示。因此,我最终只得到了一个名为1它现在包含来自其中一个消失的文件的内容,仅此而已。

我是否有机会恢复丢失的文件(或者可能是文件中的实际数据 - 它们都是文本文件)或者它们几乎永远消失了?


前:

misha@hp-laptop:~/Documents/prgmg/work$ ls
add.s  bubble.s  cpuid.s  div.s    hello.s  mult.s       sum.s   test.s
a.out  c         demo.s   gas.txt  max.s    print_arr.s  test.c
misha@hp-laptop:~/Documents/prgmg/work$ mkdir asm

后:

misha@hp-laptop:~/Documents/prgmg/work$ ls
1  asm  c

因此,如您所见,我想将所有汇编语言文件放入asm目录中。就目前情况而言,1是一个文本文件,其中包含来自的内容gas.txt

答案1

您已丢失所有文件,但 提供的最后一个文件除外find,现在该文件名为./1。请注意 会find按其自身顺序查找文件,因此“最后一个”并不意味着您的想法。通过echo在 前面插入mv,我们会看到:

Script started on Thu 14 Jul 2016 07:02:01 PM EDT
+w3@aardvark:~(0)$ mkdir tmp/answer
+w3@aardvark:~(0)$ cd !$
cd tmp/answer
+w3@aardvark:~/tmp/answer(0)$ for i in a b c d; do
> mkdir $i
> done
+w3@aardvark:~/tmp/answer(0)$ for i in a/1 b/2 c/3 d/4 a/0 ; do
> touch $i
> done
+w3@aardvark:~/tmp/answer(0)$ touch 9 8 7 6
+w3@aardvark:~/tmp/answer(0)$ find . -maxdepth 1 -type f -exec echo mv {} ./1 \;
mv ./8 ./1
mv ./6 ./1
mv ./9 ./1
mv ./7 ./1
+w3@aardvark:~/tmp/answer(0)$ exit

Script done on Thu 14 Jul 2016 07:05:21 PM EDT

相关内容