arquivo de script do shell do Unix arquivo do mês anterior

0

Eu tenho um diretório contendo arquivos nomeados como

SLS20160112.001    (20160112 stands for YYYYMMDD)

Desejo arquivar todos os arquivos do mês anterior. Por exemplo, dado:

SLS20150201.001
SLS20160107.001
SLS20160130.001
SLS20160201.001

Arquivarei SLS20160107.001 e SLS20160130.001 porque esses dois arquivos têm um nome de janeiro de 2016 e atualmente é fevereiro de 2016.

Para o SLS20160201.001 (fevereiro de 2016) não deve ser arquivado, pois só quero arquivar o arquivo do mês anterior. Note que só posso considerar o nome do arquivo, não o mtime ou atime

Minha lógica atual é percorrer todos os arquivos, depois obter os arquivos do mês anterior e, em seguida, canalizar o nome do arquivo e aplicá-lo. Mas não sei como fazer essa parte.

for file in SLS*; do
   f="${file%.*}"

GET PREVIOUS MONTH FILES AND THEN ECHO

done | tar cvzf SlSBackup_<PREVIOUS_MONTH>.TAR.GZ -T-
    
por hades 26.02.2016 / 06:30

1 resposta

3

Com o GNU date , você pode usar a opção -d e as descrições em inglês para obter uma data arbitrária. Por exemplo, date -d "one month ago" . Então, podemos trabalhar assim:

FILESPEC="SLS$(date -d "1 month ago" +"%Y%m")??.001"
LASTMONTH="$(date -d "1 month ago" +"%m")"
IFS=

tar cvzf "SlsBackup_${LASTMONTH}.tar.gz" $FILESPEC

Felizmente, isso é inteligente o suficiente para que, se você executá-lo, por exemplo, em janeiro de 2017, faça o backup correto dos arquivos para dezembro de 2016.

    
por 26.02.2016 / 07:04

Tags