Com uma implementação de pax
cujos regexps suportam o operador \|
:
now=$(date +%F_%T)
pax -rw -"s@/\(\([^/]*\)\(\.[^/]*\)\|\([^/.]*\)\)@/_$now@g" . /dest/
Eu realmente recomendo usar o formato 2014-01-18, já que não é ambíguo e funciona da mesma maneira, lexicograficamente e cronologicamente.
Se você não tiver pax
, mas tiver o GNU tar
, poderá escrevê-lo:
tar -cf - --transform="s@/\(\([^/]*\)\(\.[^/]*\)\|\([^/.]*\)\)@/_$now@g" . |
(cd /dest && tar xf -)
Em ambos os casos, se houver links simbólicos, a substituição também se aplica ao destino do symlink e é improvável que seja feito apropriadamente, a menos que todos os destinos de link estejam no formato ./some/thing
.