O script tem que criar um novo arquivo todos os dias com o mesmo nome, antes de criá-lo tem que renomear o arquivo do dia anterior com data e hora

1

Temos um trabalho Unix que é executado a cada hora em um dia.

Queremos atualizar o script para criar um novo arquivo todos os dias com o mesmo nome (digamos abc.xyz), antes de criá-lo, é necessário renomear o arquivo do dia anterior com data e hora (abc.xyz.12102014).

Na primeira hora, se o arquivo for criado, a segunda hora e assim por diante, o mesmo arquivo (abc.xyz) deverá ser usado.

No dia seguinte (13102014), este arquivo (abc.xyz) deve ser renomeado como abc.xyz.12102014 e o novo abc.xyz deve ser criado, em 14102014 ele deve ser renomeado como abc.xyz.13102014.

Eu tentei abaixo, mas recebi um erro em

if [ $filedate -lt $currdate ]

com 12 Command Not found , 12 é a data do exemplo acima.

Por favor me ajude o que está errado no roteiro abaixo.

Eu sou novo no Unix, portanto, usei uma lógica semelhante à que eu uso em C #.

Por favor, me diga se existe outro jeito.

sdate='date +%Y-%m-%d -d "yesterday"'

file=myfile

currdate='date +%d'

currmon='date +%m'

if [ -f $file ]

then

    echo "File exists."

    filedate=$(ls -l $file| awk '{ print $7}')

    if [ $filedate -lt $currdate ]

    then

        echo "Old File"

        cp $file $file.$sdate
        rm $file
    else
##something to do
    fi
else
##something to do
fi

Para as datas em 30/31 do mês atual em comparação com o primeiro dia do mês seguinte, posso fazer a lógica semelhante, mas ela falha novamente em

if [$filemonth -lt $currmonth]
    
por Aditya 25.08.2016 / 18:58

1 resposta

0

Em vez de criar o arquivo abc.xyz , crie um link simbólico para o arquivo (real) abc.xyz.YYYYMMDD :

linkname="abc.xyz"

today="$( date +"%Y%m%d" )"
filename="$linkname-$today"

if [[ ! -e "$filename" ]] || [[ ! -e "$linkname" ]]; then
    touch "$filename"
    ln -s -f "$filename" "$linkname"
fi

Isso criará

lrwxr-xr-x  1 kk  kk  16 Feb  2 11:16 abc.xyz -> abc.xyz-20170202
-rw-r--r--  1 kk  kk   0 Feb  2 11:16 abc.xyz-20170202

e seu programa escrevendo para abc.xyz irá realmente gravar em abc.xyz-20170202 .

No dia seguinte, quando você executar isso, você vai ter

lrwxr-xr-x  1 kk  kk  16 Feb  2 11:31 abc.xyz -> abc.xyz-20170203
-rw-r--r--  1 kk  kk   0 Feb  2 11:16 abc.xyz-20170202
-rw-r--r--  1 kk  kk   0 Feb  2 11:31 abc.xyz-20170203
    
por 02.02.2017 / 18:54

Tags