shell脚本在特定目录中创建新文件时创建备份文件

时间:2013-06-09 17:04:06

标签: linux bash shell

最近我在接受采访时被问到以下问题。

假设我尝试在/ home / pavan目录中创建一个名为myfile.txt的新文件。  它应该在同一目录中自动创建myfileCopy.txt。     A.txt然后它会自动创建ACopy.txt,     B.txt然后BCopy.txt在同一目录中。

如何使用脚本完成此操作?我可能知道这个脚本应该在crontab中运行。

请不要使用inotify-tools。

1 个答案:

答案 0 :(得分:0)

你能解释一下你为什么要这样做吗?

VIM等工具可以自动创建您正在处理的文件的备份副本。其他工具如Dropbox(适用于Linux,Windows和Mac)可以版本文件,因此它会备份过去30天内文件的所有副本。

您可以通过为用于创建这些文件的工具创建别名来执行某些操作。使用您倾向于使用的工具编辑文件,别名可以在调用工具之前创建副本。

否则,您的选择是使用crontab偶尔进行备份。


附录

  

让我解释假设我有目录/ home / pavan现在我在该目录中创建文件myfile.txt,现在我应该自动生成同一文件夹中的myfileCopy.txt文件
  paven

没有简单的用户工具可以做到这一点。事实上,就你所说的方式而言,目前尚不清楚你想要做什么以及为什么做。备份有两个原因:

  1. 要保存旧版本的文件,以防我需要撤消最近的更改。在您的方案中,我只是保存一个新的未更改的文件。
  2. 在发生灾难时保存文件。我希望该文件位于其他位置:在另一台计算机上,可能位于不同的物理位置,或者至少不在与当前文件相同的磁盘驱动器上。在您的情况下,您将在同一目录中进行备份。
  3. 可以将像VIM这样的工具设置为自动备份您正在编辑的文件。这满足上述原因#1:获取文件的旧版本。 EMAC可以创建无限的备份系列。

    Dropbox等工具会在以太网的不同位置创建文件备份。这满足了理由#2,它将使文件免于灾难。 Dropbox还会保存您保存的文件,这也是原因#1。

    版本控制工具也可以同时执行这两项操作, 如果我记得提交更改 。它们将所有更改存储在我的文件中(原因#1),并且可以将其存储在远程位置的服务器上(原因#2)。

    我在想crontab,但我会备份什么?备份任何已修改的文件(原因#1),但如果我将它存储在同一目录中,则没有太大意义。我所有的都是文件的重复副本。备份以前的版本是有意义的,但我怎么能得到一个简单的crontab才能知道这个?您想保留旧版本的文件,还是只保留原始副本?

    实现此目的的唯一真正方法是在系统级别使用分层覆盖磁盘IO调用的工具。例如,在一个位置,我们使用Netapps创建了一个$HOME/.snapshot目录,其中包含您的目录每分钟查看一小时的方式,一天中的每小时以及一个月中的每一天。如果有人删除了某个文件或将其搞砸了,那么该文件的版本很可能存在于$HOME/.snapshot目录中的某个位置。

    在我的Mac上,我使用了Time Machine的组合 - 它每小时备份整个驱动器,并为我提供一段时间可以延伸一年半的驱动器的快照)和Dropbox,它可以保存我的文件某个主Dropbox服务器。我被这种组合多次拯救了。

    我现在明白这是一个面试问题。我不确定这个位置是什么。提问者是否希望你提出一种全系统的方式来实现这一点,比如网络技术的位置,或者这是人们在采访某人时引发的那些大脑泄漏之一,但也是前一天晚上喝醉了他们应该问申请人什么?

    他们是否希望对备份的内容进行全面讨论,以及为什么在同一目录中创建后立即备份文件是愚蠢的想法非最佳解决方案,或者他们是否试图解决出现了一个问题,但技术不足以理解真正的问题?