Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux-还原文件_Linux_Bash_Shell - Fatal编程技术网

Linux-还原文件

Linux-还原文件,linux,bash,shell,Linux,Bash,Shell,我已经编写了一个基本的shell脚本,它将指定的文件移动到垃圾箱目录中。脚本如下: #!/bin/bash #move items to dustbin directory mv "$@" ~/dustbin/ echo "File moved to dustbin" 这对我来说很好,我指定的任何文件都会移动到垃圾箱目录。但是,我想做的是创建一个新脚本,将垃圾箱目录中的文件移回其原始目录。我知道我可以很容易地编写一个脚本,将它移回用户指定的位置,但我更希望有一个脚本将它移回其原始目录 这可能吗

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

#!/bin/bash
#move items to dustbin directory
mv "$@" ~/dustbin/
echo "File moved to dustbin"
这对我来说很好,我指定的任何文件都会移动到垃圾箱目录。但是,我想做的是创建一个新脚本,将垃圾箱目录中的文件移回其原始目录。我知道我可以很容易地编写一个脚本,将它移回用户指定的位置,但我更希望有一个脚本将它移回其原始目录

这可能吗


我使用的是Mac OS X 10.6.4和Terminal

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

创建包含两列的日志文件:

  • 垃圾箱中的完整文件名
  • 完整的原始路径和文件名
  • 不管怎样,你都需要这个日志文件——当一个用户删除了不同目录中的两个同名文件时,你会怎么做
    /home/user/.wgetrc
    /home/user/old/.wgetrc


    当用户删除一个文件,创建一个同名的新文件,然后再删除该文件时,您会怎么做?你需要版本或时间戳之类的东西

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

    创建包含两列的日志文件:

  • 垃圾箱中的完整文件名
  • 完整的原始路径和文件名
  • 不管怎样,你都需要这个日志文件——当一个用户删除了不同目录中的两个同名文件时,你会怎么做
    /home/user/.wgetrc
    /home/user/old/.wgetrc


    当用户删除一个文件,创建一个同名的新文件,然后再删除该文件时,您会怎么做?你需要版本或时间戳之类的东西

    您需要将原始位置存储在某个地方,或者存储在数据库中,或者存储在文件的扩展属性中。数据库无疑是实现这一点的最简单方法,不过扩展属性会更健壮。查看~/.Trash/我看到一些文件,但不是所有文件都有扩展属性,因此我不确定Apple是如何做到的。

    您需要将原始位置存储在某个地方,或者存储在数据库中,或者存储在文件的扩展属性中。数据库无疑是实现这一点的最简单方法,不过扩展属性会更健壮。查看~/.Trash/我看到一些文件,但不是所有文件都有扩展属性,因此我不确定Apple是如何做到的。

    您需要对文件中的源目录进行编码。我认为最简单的方法是更改垃圾箱目录中的文件名。所以/home/user/music/song.mp3变成~/dustbin/song.mp3 | home\u user\u music


    当您将其复制回来时,您的脚本需要处理文件名并构造从|开始的路径。

    您需要以某种方式对文件中的源目录进行编码。我认为最简单的方法是更改垃圾箱目录中的文件名。所以/home/user/music/song.mp3变成~/dustbin/song.mp3 | home\u user\u music


    当您将其复制回来时,您的脚本需要处理文件名并构造从|开始的路径。

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

    /some/directory/somewhere/filename
    移动的文件将被移动到
    ~/dustbin/some/directory/somewhere/filename
    中,您需要执行
    查找~/dustbin-name“$file”
    以根据其基本名称(从用户输入)进行查找。然后您只需从
    find
    的输出中修剪“~/busbin”,就可以使用目的地了。如果
    find
    返回多个文件,您可以列出建议的文件供用户选择。如果希望回滚到早期版本,可以使用
    ~/dustbin/$deletiondate


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

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

    /some/directory/somewhere/filename
    移动的文件将被移动到
    ~/dustbin/some/directory/somewhere/filename
    中,您需要执行
    查找~/dustbin-name“$file”
    以根据其基本名称(从用户输入)进行查找。然后您只需从
    find
    的输出中修剪“~/busbin”,就可以使用目的地了。如果
    find
    返回多个文件,您可以列出建议的文件供用户选择。如果希望回滚到早期版本,可以使用
    ~/dustbin/$deletiondate


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

    我认为创建一个类似于其他建议的数据库对bash来说是非常重要的。如果您要这样做,请切换语言。这里的问题是您的文件名中可能已经有
    。您可以通过将原始文件名中的
    |
    替换为
    |
    (并在还原时将其反转)来解决这个问题,因为路径中不能有空目录名。我认为创建类似于其他建议的数据库对于bash来说是非常重要的。如果您要这样做,请切换语言。这里的问题是您的文件名中可能已经有
    。您可以通过将原始文件名中的
    |
    替换为
    |
    (并在还原时将其反转)来解决这个问题,因为路径中不能有空目录名。我非常喜欢扩展属性的想法:)我非常喜欢扩展属性的想法:)