Используя =
с дополнительным окружающим пробелом как разделитель:
awk -F '[[:blank:]]*=[[:blank:]]*' '
$1 == "Name" {name = $2; next}
$1 != "End" {print name, $1, $2}
' filename
При рассмотрении их awk
решения это может стать немного сбивающим с толку, что продолжается. При вставке некоторых хорошо помещенных операторов печати, можно начать видеть визуальным способом, что продолжается:
$ awk -F '[[:blank:]]*=[[:blank:]]*' '
$1 == "Name" { name = $2; print "--NAME: "$2; next };
$1 != "End" { print " --END: "name,$1,$2 }
' sample.txt
Который производит следующий вывод:
--NAME: x:y
--END: x:y Z a:b.c
--END: x:y Z1 a1:b1.c1
--NAME: x1:y1
--END: x1:y1 Z2 a2:b2.c2
--END: x1:y1 Z3 a3:b3.c3
--END: x1:y1 Z4 a4:b4.c4
--NAME: l:k
--END: l:k s w:e.v
rsync
имеет опцию - Min-size
:
--min-size=SIZE don't transfer any file smaller than SIZE
, которые должны помочь вам, если у вас есть файлы, которые должны быть переданы, если нет файла размера нуля байта на Сторона назначения вещей.
AFAIK Нет возможности сказать rsync, чтобы принять специальные действия на основе источника и стороны назначения.
Обратите внимание, :чтобы избежать перезаписи -файлов с файлом нулевой длины, вам необходимо установить --min-size=1
Невозможно иметь файл меньше нулевого размера. Если только справочная страница не содержит ошибки и там должно быть написано «не передавать файлы меньшего или равного SIZE»