primeiro altere a primeira linha do awk com:
dir="$(echo "$i" | awk '{split($0,a,"_"); printf "%s_%s",a[1],a[2]}')"
para que, caso contenham espaços em branco, funcione ainda.
Em seguida, substitua a linha "para eu em" por:
echo -e "$tosend" | grep -v '^$' | sort | uniq | while IFS= read i ;do
e adicione um pouco "" em lugares relevantes:
#!/bin/bash
tosend=""
for i in 20*.log*; do
dir="$(echo "$i" | awk '{split($1,a,"_"); printf "%s_%s",a[1],a[2]}')";
if [ ! -d "$dir" ]; then
mkdir "$dir" || { echo "ERROR during: mkdir '$dir'" ; exit 1 ; };
fi;
cp "$i" "$dir" || { echo "ERROR during: cp '$i' '$dir'" ; exit 2 ; };
tosend="${tosend}\n${dir}"
done
echo -e "$tosend" | grep -v '^$' | sort | uniq| while IFS= read i ;do
echo "Compressing $i"
echo REMOVE THIS ECHO ONCE TESTED tar -zcvf "${i}.tar.gz" "$i" \
&& { echo REMOVE THIS ECHO ONCE TESTED scp "${i}.tar.gz" user@server:/tmp/somedir/ \
|| { echo "ERROR during: scp '${i}.tar.gz' user@server:/tmp/somedir/" ; exit 4 ; };
}
|| { echo "ERROR during: tar -zcvf '${i}.tar.gz' '$i'" ; exit 3 ; };
done
você pode querer tirar a parte "v" no tar, para salvar alguma exibição (uma vez que você sabe que funciona)
outra maneira para o acima:
substitua meu
for i in 20*.log*; do
com:
ls -1d *|grep '^[0-9]*-[0-9]*-[0-9]*_[0-9]*_[0-9]*\.log.*'| while IFS= read i ; do
Ou simplifique o grep:
ls -1d *|grep '^[0-9_-]*\.log' | while IFS= read i ; do
que deve ser suficiente (mas pode corresponder a um arquivo "./-_-1234.log.hahaha" ...)