【问题标题】:Script to determine directory 'diff'确定目录“差异”的脚本
【发布时间】:2011-05-17 18:02:31
【问题描述】:

我有两个目录,它们是同一个软件包的不同版本。我想列出两者之间发生更改的所有文件/目录,然后将这些差异复制到新目录。

我一直在尝试使用 md5sumdiff -Nurq 的不同脚本,但无法获得我想要的结果。

有什么建议吗?

编辑

我最初尝试使用md5sums,但这似乎不起作用,尤其是在缺少新文件的情况下。

接下来我尝试了这样的循环:

for x in `diff -Nurq ./dir1/ ./dir2/ | awk -F" " '{print $4}'`
do 
  mkdir -vp ./dir_1_2_upgrade/$x; 
  cp $x ./dir_1_2_upgrade/$x
done

但这最终导致了一堆目录而没有文件。

【问题讨论】:

  • 你尝试了什么,它是如何失败的?
  • @larsmans 请看我的编辑。
  • 您复制有更改的文件的方法永远不会捕获删除,这是一件坏事吗?
  • @larsmans,我认为这是一件好事,因为我想为用户提供添加新内容的选项,但不会破坏他们之前可能建立的任何内容。处理删除听起来更复杂,对吧?

标签: command-line diff md5sum


【解决方案1】:
source=SOME_DIR
dest=OTHER_DIR

# TODO: rewrite as awk script
delta=`diff -ur $source $dest`
deleted=`echo "$delta" | grep "^Only in ${source}:" | sed "s/^Only in ${source}: //"`
added=`echo "$delta"   | grep "^Only in ${dest}:"   | sed "s/^Only in ${dest}: //"`
changed=`echo "$delta" | grep '^\+\+\+' | awk '{print $2}'`

echo $deleted
echo $added
echo $changed

如果文件名不包含空格,则有效。如果您希望它尽可能通用,请查看程序的源代码,例如 git-diff

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 2022-07-30
    • 1970-01-01
    相关资源
    最近更新 更多