Скрипт для определения каталога 'diff' - PullRequest
2 голосов
/ 17 мая 2011

У меня есть две директории, которые являются разными версиями одного и того же программного пакета. Я хотел бы перечислить все файлы / каталоги, которые изменились между ними, а затем скопировать эти различия в новый каталог.

Я пробовал разные сценарии с md5sum и diff -Nurq, но не смог получить желаемый результат.

Любые рекомендации?

Редактировать

Изначально я пытался взять md5sum с, но, похоже, это не сработало, особенно если новые файлы отсутствовали.

Далее я попробовал цикл, подобный этому:

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

Но в итоге получилось несколько каталогов, а файлов нет.

1 Ответ

1 голос
/ 17 мая 2011
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.

...