В одну сторону:
for d in /*/files/a/
do
mv "$d" "${d%a/}b"
done
... который использует *
для сопоставления всех исходных каталогов верхнего -уровня «клиент», за которыми следует требуемая структура подкаталогов /files/a/
. Затем он использует расширение параметра, чтобы удалить конечный a/
каждого из них, а затем «заменить» его на b
для переименования.
У меня нет такого огромного набора данных для сравнительного анализа. Попробуйте это:
$ perl -E 'say for (("foo") x 4, ("bar") x 4, "baz", ("foo", "bar", "baz") x 4)' | awk 'NR == 1 {word=$0; count=1; next} $0 != word {print count,word; word=$0; count=1; next} { count++ } END { print count,word }'
4 foo
4 bar
1 baz
1 foo
1 bar
1 baz
1 foo
1 bar
1 baz
1 foo
1 bar
1 baz
1 foo
1 bar
1 baz
Использование mawk
вместо awk
может повысить производительность.