Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Scripting 如何按时间顺序将tcsh历史定期备份到单个文件?_Scripting_Backup_History_Tcsh - Fatal编程技术网

Scripting 如何按时间顺序将tcsh历史定期备份到单个文件?

Scripting 如何按时间顺序将tcsh历史定期备份到单个文件?,scripting,backup,history,tcsh,Scripting,Backup,History,Tcsh,我在工作中使用tcsh—我广泛使用的特性之一是在shell提示符下完成命令行历史记录。目前,我已将历史文件的大小限制为2000(因为我不想让shell速度过慢)。然而,有时我需要一个命令,我知道我已经用了一两个月了,但现在已经被删除了。所以我想要一个系统,其中: 我的历史缓冲区仅存储2000行 与其擦除旧命令,不如将它们保存到“主”历史文件中,按时间顺序排列,即如果打开了两个外壳,则历史记录中输入的命令应按照日期戳排序(而不是外壳关闭的顺序) 如果这个主历史文件可以自动备份(比如每周备份),那就

我在工作中使用tcsh—我广泛使用的特性之一是在shell提示符下完成命令行历史记录。目前,我已将历史文件的大小限制为2000(因为我不想让shell速度过慢)。然而,有时我需要一个命令,我知道我已经用了一两个月了,但现在已经被删除了。所以我想要一个系统,其中:

  • 我的历史缓冲区仅存储2000行

  • 与其擦除旧命令,不如将它们保存到“主”历史文件中,按时间顺序排列,即如果打开了两个外壳,则历史记录中输入的命令应按照日期戳排序(而不是外壳关闭的顺序)

  • 如果这个主历史文件可以自动备份(比如每周备份),那就太完美了


  • 我相信很多狂热的shell用户都遇到过这样的情况——我希望从这样的用户中得到答案

    从未想过要这么做,但最简单的方法是编写一个cron作业,将历史文件附加到另一个文件中。这样做的问题是,除非您在完成转储后编写cron清除历史文件,否则您将获得重复的文件


    历史记录(据我所知)仅按行号存储,以便每个转储重复这些编号。但是,您可以添加一个带有转储日期的标记线。

    2000相当低。你可以在不受太多痛苦的情况下筹集相当数量的资金

    接下来,您可能希望在注销时存储历史记录,因为这是将新命令添加到.history文件的时候

    在$HOME中创建一个名为.logout的文件(对于bash用户,此文件为.bash\u logout)。在这种情况下,将历史记录的内容复制到永久存储区。例如:

    cat $HOME/.history >> $HOME/.ancient_history
    
    这将把历史附加到一个文件“.again_history”。对于bash用户,要复制的文件称为.bash\u history

    然后创建一个cron作业,该作业会时不时地创建备份。首先,这里是一个在每天午夜后5分钟将文件移动到带有日期戳的文件名

     5 0 * * *       mv $HOME/.ancient_history $HOME/.ancient_history_`date +%s`
    

    也许你可以用这个做更多的事情,但这就足够开始了。这是一个我以前也没有想到过的好主意:-)

    我真的怀疑在2000个条目之后它会变得明显慢。实际上,上面的答案非常简单,让历史记录10000行。或者逐渐变大,直到你看到减速。