Исключать существующие файлы по имени при копировании с помощью rsync

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

#!/bin/bash

stopwatch(){
    date1=`date +%s`; 
    while kill -0 $1 2>/dev/null; do 
        printf "Elapsed time: %s\r" "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)";
        sleep 0.1
    done
}

find /path/to/dir > output 2> error  &
stopwatch $!

Обратите внимание, что этот подход означает, что если вы завершите сценарий с помощью Ctrl + C , процесс findпродолжит работу в фоновом режиме. Решение Стефана лучше.

0
17.08.2020, 03:21
1 ответ

Ваше описание не соответствует тому, как должен работать --ignore-existing. Это действительно должно предотвратить копирование (еще более новых )файлов, которые уже существуют в месте назначения.

$ rsync -a a/ b/
$ touch a/new a/update
$ rsync -ai --ignore-existing a/ b/
.d..t......../
>f++++++++++ new
$ ls -ln */{new,update}
-rw-r--r--  1 34570  344586812  0 Aug 17 14:50 a/new
-rw-r--r--  1 34570  344586812  7 Aug 17 14:50 a/update
-rw-r--r--  1 34570  344586812  0 Aug 17 14:50 b/new
-rw-r--r--  1 34570  344586812  7 Mar 26 17:02 b/update

a/updateтеперь имеет более позднюю отметку времени, но не обновляется rsync.

Не могли бы вы еще раз запустить rsync,но добавить флаг -iи показать вывод для существующих файлов? Он добавит строку для скопированных файлов по причине копирования. Мне интересно, есть ли там какая-то информация, которая укажет на проблему.

1
18.03.2021, 23:12

Теги

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