2015-05-22 2 views
2

Мне нужно написать сценарий в Gradle, который принимает в качестве входных 2 папки. Обе папки содержат < 1000 файлов (в основном изображений) с достаточно похожей структурой. Результат должен быть списком файлов, которые изменились и какова разница (добавленный файл/удаленный файл/измененный файл).Как разделить файлы/папки в Gradle?

Редактировать: Heres образец сценария https://gist.github.com/igormukhin/71d780c4274336eeb297. Единственная проблема в том, что она сравнивается по метке времени.

+1

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

+0

@JBNizet im не запрашивает код, а что использовать для diff. Генерировать хеши? Сравнить как-нибудь двоичное содержимое файла? его как 3 строки кода, или в настоящее время это слишком много, чтобы просить в SO? – sydd

+0

Если это похоже на 3 строки кода, почему бы вам не написать их самостоятельно? Если вы хотите проверить, совпадают ли два файла, то да, вам придется сравнивать двоичное содержимое файлов (если их длина не отличается). –

ответ

3

Я недавно закодировал что-то похожее на то, что вы просите: DirectoryDifferenceCollector; однако он фактически сравнивает содержимое файлов (как хэш), а не метку времени. Я был бы готов обновить его, чтобы принять настраиваемую стратегию, если это будет соответствовать вашим потребностям, или вы можете просто использовать используемые концепции.

В основном он сканирует оба каталога и определяет недостающие файлы как в A, так и в B, а затем определяет, какие файлы являются общими для обоих каталогов, но имеют различный контент.

Результаты собраны в объекте DirectoryDifference с соответствующими путями файлов для каждой категории.

+0

Отлично, это похоже на то, что мне нужно :) Мне нужно сравнить двоичное содержимое, а не только метки времени. Это будет частью нашего art build pipelile для скрипта, который генерирует .zip-файлы, которые содержат измененные/обновленные арт-активы. Мне нужно будет сделать некоторые другие небольшие изменения (сценарий будет прерван, если в первом каталоге параметров содержится файл, который второй параметр не имеет) – sydd

1

Я был бы соблазн использовать diff:

def process = 'diff x y'.execute() 

Вы можете получить доступ к вывод команды в виде текста:

println process.err.text 
println process.in.text 

И получить статус выхода через:

int status = process.waitFor() 

Многие распространенные операционные системы поставляются с установленным diff, но Windows, вероятно, нет.

+0

Он должен быть агностическим, поэтому я использую Gradle. – sydd

+0

@sydd Я обновил свой ответ, чтобы сделать его платформенным agnostic – Armand

+0

Это странно, версия, на которую я смотрю сейчас, пока нет. – Trejkaz

Смежные вопросы