Каталоги файлов Rsync с разными именами

Общая статистика сверхнимисамыми длинными строками с использованием GNUawkрешения:

awk 'BEGIN{ PROCINFO["sorted_in"]="@ind_num_desc" }
     { len=length; a[len]=(a[len])? a[len]", "NR:NR }
     END{ for(i in a) printf "Length: %s, row number(s): %s\n",i,a[i] }' file

Выход:

Length: 23, row number(s): 2, 3
Length: 22, row number(s): 4
Length: 16, row number(s): 1
2
19.01.2020, 21:57
1 ответ

rsync не позволяет перезаписывать пути между источником и получателем.

Вместо этого вы могли бы вызвать rsyncодин раз для каждого каталога /testcopy/*/incoming:

for srcdir in /testcopy/*/incoming/; do
    [ ! -d "$srcdir" ] && break

    destdir=/testdest/${srcdir#/testcopy/}   # replace /testcopy/ with /testdest/
    destdir=${destdir%/incoming/}/outgoing/  # replace /incoming/ with /outgoing/

    mkdir -p "$destdir" &&
    rsync -av "$srcdir" "$destdir"
done

Для каждого каталога incomingпуть назначения создается путем замены префикса пути /testcopy/на /testdest/и суффикса пути /incoming/на /outgoing/. Это делается с помощью двух стандартных замен параметров.

Цикл также создает каталог назначения на тот случай, если он еще не существует.

[ ! -d "$srcdir" ] && breakв начале цикла гарантирует, что mkdirи rsyncне будут запущены, если шаблон ничему не соответствует (оболочка по умолчанию оставит шаблон нераскрытым, если вы не вzsh). В bashвы можете вместо этого использовать shopt -s nullglobперед циклом.

0
27.01.2020, 22:24

Теги

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