Linux - 恢复文件

时间:2010-11-11 16:38:38

标签: linux bash shell

我编写了一个基本的shell脚本,它将指定的文件移动到垃圾箱目录中。脚本如下:

#!/bin/bash
#move items to dustbin directory
mv "$@" ~/dustbin/
echo "File moved to dustbin"

这对我来说很好,我指定的任何文件都会移动到垃圾箱目录。但是,我想要做的是创建一个新脚本,将垃圾箱目录中的文件移回其原始目录。我知道我可以轻松编写一个脚本,将其移回用户指定的位置,但我更愿意将其移动到原始目录。

这可能吗?

我正在使用Mac OS X 10.6.4和终端

4 个答案:

答案 0 :(得分:3)

您必须存储原始文件的来源。可能在单独的文件,数据库或文件属性(元数据)中。

创建一个包含2列的日志文件:

  1. 垃圾箱中的完整文件名
  2. 完整的原始路径和文件名
  3. 无论如何,您将需要此日志文件 - 当用户删除不同目录中的2个文件但名称相同时,您会怎么做? /home/user/.wgetrc/home/user/old/.wgetrc

    当用户删除文件,创建一个具有相同名称的新文件,然后将其删除时,您会怎么做?您需要版本或时间戳等。

答案 1 :(得分:1)

您需要将原始位置存储在数据库或文件的扩展属性中。数据库绝对是最简单的方法,尽管扩展属性会更强大。查看〜/ .Trash /我看到一些,但并非所有文件都有扩展属性,所以我不确定Apple是如何做到的。

答案 2 :(得分:1)

您需要以某种方式编码文件中的源目录。我认为最简单的方法是更改​​垃圾箱目录中的文件名。因此 /home/user/music/song.mp3 变为〜/ dustbin / song.mp3 | home_user_music

当你复制它时,你的脚本需要处理文件名并构建从|。

开始的路径

答案 3 :(得分:1)

另一种方法是让文件系统成为你的数据库。

/some/directory/somewhere/filename移出的文件将移至~/dustbin/some/directory/somewhere/filename,您可以find ~/dustbin -name "$file"根据其基本名称(来自用户输入)查找该文件。然后你只需修剪"〜/ bustbin"从find的输出中,您已准备好使用目的地。如果find返回了多个文件,则可以列出建议的文件以供用户选择。如果您希望能够回滚到早期版本,可以使用~/dustbin/$deletiondate

您可以执行cron作业,定期删除旧文件和目录(如果为空)。