O seguinte script:
- para cada arquivo
- Se o nome do arquivo for maior que 8 (isto é, é possível manter uma data)
- basefilename mantém o nome do arquivo sem os últimos 8 caracteres
- HOJE - mantém os últimos 8 caracteres (a data)
- YESTERDAY - tem um dia antes de $ TODAY como 8 caracteres
- Em vez de usar
mv
, criei uma pasta/tmp/storage
e o script copiará os arquivos para esse local. Dessa forma, a renomeação de um arquivo não corromperá outro arquivo se, por acaso, o nome da base dos dois arquivos for o mesmo, mas a data será diferente em um dia
Observação: para permitir que o script execute o cp
, você deve remover o echo
da linha echo cp ...
mkdir -p /tmp/storage
for f in *
do
if [ "${#f}" -gt 8 ]; then
filebasename=${f::-8}
TODAY=${f: -8}
YESTERDAY='date '+%C%y%m%d' -d "$TODAY-1 days"'
echo cp $f /tmp/storage/${f//$TODAY}$YESTERDAY;
fi
done
exemplo:
$ ls *20*
aaa2hhh20170329 aaahhh20170329 xajds20170222 xajsxs20170224
Resultado do script :
cp aaa2hhh20170329 /tmp/storage/aaa2hhh20170328
cp aaahhh20170329 /tmp/storage/aaahhh20170328
cp xajds20170222 /tmp/storage/xajds20170221
cp xajsxs20170224 /tmp/storage/xajsxs20170223