Как я могу рекурсивно скопировать каталог в другого и заменить только файлы, которые не изменились?

С Java8 это можно сделать еще более чистым, используя комбинацию Comparator и Lambda expressions

Пример:

class Student{

    private String name;
    private List scores;

    // +accessor methods
}

class Score {

    private int grade;
    // +accessor methods
}

    Collections.sort(student.getScores(), Comparator.comparing(Score::getGrade);

20
задан barfoon 2 March 2009 в 06:11
поделиться

3 ответа

Это могло бы, но любое время, соответствующие файлы в export и webroot имеют тот же довольный, но различное время изменения, Вы волновали бы выполнение ненужной операции копии. Вы, вероятно, получили бы немного более умное поведение от rsync:

rsync -pr ./export /path/to/webroot

Кроме того, rsync может скопировать файлы от одного хоста до другого по соединению SSH, если у Вас когда-нибудь есть потребность сделать это. Плюс, это имеет огромное количество опций, которые можно определить для тонкой настройки его поведения - смотрят в странице справочника для деталей.

РЕДАКТИРОВАНИЕ : относительно Вашего разъяснения о том, что Вы подразумеваете под сохранением полномочий: Вы, вероятно, хотели бы кончить -p опция.

24
ответ дан 30 November 2019 в 00:14
поделиться

Походит на задание для cpio (и следовательно, вероятно, tar GNU может сделать это также):

cd export
find . -print | cpio -pvdm /path/to/webroot

при необходимости в сохраненных владельцах необходимо сделать это как корень, конечно. -p опция является 'режимом передачи', означая копию между местоположениями; -v является подробным (но не интерактивным; существует различие); -d средства создают каталоги по мере необходимости; -m средства сохраняют время изменения. По умолчанию без -u опция, cpio не перезапишет файлы в целевой области, которые являются более новыми, чем тот от исходной области.

5
ответ дан 30 November 2019 в 00:14
поделиться
  1. -u перезаписывает существующую папку файлов, если место назначения старше, чем источник
  2. ,-p сохраняет разрешение и даты
  3. ,-f выключает многословие
  4. ,-r делает копию рекурсивной

Так похож на Вас, получил весь корректный args к cp

6
ответ дан 30 November 2019 в 00:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: