Как скопировать файлы из одного каталога в другой, чтобы копировались только новые файлы? [дубликат]

perl -F, -lane '

@ARGV and $Phone_of{$F[0]} = $F[1] =~ s/(...)(...)(.*)/($1)$2-$3/r;

@ARGV or $Person_of{uc $F[1]} = $F[0];

END {
   $fmt = join "\t", map { qq/%${_}s/ } qw/ -10 1 1 /;
   print sprintf $fmt, qw/ Day Name Phone /;
   print "_" x 37;
   for my $day ( map { uc($_ . day) } qw/ sun mon tues wednes thurs fri satur / ) {
      print sprintf $fmt, $day, $Person_of{$day} || "Nobody", $Phone_of{$Person_of{$day}};
   }
}

' project2.phone project2.day

Сначала мы заполняем хэш % Phone_of ключами в качестве имен и значениями их телефонных номеров. Затем, когда @ARGV обнуляется, т. Е. Обрабатывается последний файл (.day), мы заполняем хэш % Person_of ключами в виде дня в верхнем регистре и значением в виде человека, работающего в этот день.

В блоке END {...} , когда оба файла были обработаны, мы сначала устанавливаем строку формата и с ее помощью печатаем заголовок. Наконец, мы перебираем дни недели (в верхнем регистре) и отображаем день, человека, работающего в этот день (или никого, если в этот день никто не работает), и номер телефона человека.

Результат:

Day             Name    Phone
_____________________________________
SUNDAY          Tom     (248)496-2204
MONDAY          Nobody
TUESDAY         Barry   (313)123-4567
WEDNESDAY       Alden   (616)556-4458
THURSDAY        Dave    (734)838-9800
FRIDAY          Carl    (248)344-5576
SATURDAY        Marci   (313)449-1390

Предостережения

No whitespace(s) in the input files (*.phone, *.day)
1
21.06.2017, 22:41
1 ответ

rsync был разработан именно для решения этой проблемы:

[$]> rsync -av --ignore-existing dirA/ dirB/
5
27.01.2020, 23:48

Теги

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