Общая статистика сверхнимисамыми длинными строками с использованием 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
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
перед циклом.