代码之家  ›  专栏  ›  技术社区  ›  Joshua Pinter

在终端中,将多个文件夹合并成一个文件夹

  •  2
  • Joshua Pinter  · 技术社区  · 16 年前

    我有一个由WDBackup(western digital external HD backup util)创建的备份目录,其中包含备份的每一天的目录以及备份内容的增量。

    因此层次结构如下所示:

    20100101
      My Documents
        Letter1.doc
      My Music
        Best Songs Every
          First Songs.mp3
        My song.mp3 # modified 20100101
    20100102
      My Documents
        Important Docs
          Taxes.doc
      My Music
        My Song.mp3 # modified 20100102
    
    ...etc...
    

    我现在要做的是,在保持文件夹结构的同时,从最旧的到最新的增量复制,将每个已过期的文件夹都复制到一个“合并”文件夹中,以便覆盖旧的内容并保留新的内容。

    例如,如果仅使用这两个示例文件夹,则最终合并的文件夹将如下所示:

    Merged
      My Documents
        Important Docs
          Taxes.doc
        Letter1.doc
      My Music
        Best Songs Every
          First Songs.mp3
        My Song.mp3 # modified 20100102
    

    希望这有道理。

    谢谢,

    乔希

    2 回复  |  直到 16 年前
        1
  •  6
  •   Paul R    16 年前

    $ for d in 2010* ; do rsync -av ./$d/ ./Merged/ ; done
    

    请注意,在真正运行它之前,您可能只想保持谨慎,并测试它是否真的会做您希望它做的事情—为此,您可以使用rsync的 -n 进行“试运行”的标志:

    $ for d in 2010* ; do rsync -avn ./$d/ ./Merged/ ; done
    
        2
  •  1
  •   Luke404    16 年前

    所以这只是一个问题,从旧的开始一次遍历一个,然后将所有内容复制到目标,覆盖以前的内容。效率很低,但很有效。

    cd $my_disk_full_of_backups
    for x in (ls | sort); do cp -Rf $x/* /my_destination/; done
    

    尽管它很难看,但在几乎所有拥有bash的unix系统上都应该是相当可移植的。

    有关详细信息,请参见bash(1)、ls(1)和sort(1)。