Verifique se um arquivo é criado no mês atual

0

Eu tenho um arquivo no diretório, eu tenho que verificar se o arquivo criado no mês atual. Eu estou tentando uma solução no script de shell. Ex: meu caminho de arquivo é data / tmp / docs / test.txt, eu só queria verificar o arquivo test.txt é criado no mês atual.

Qualquer ajuda é apreciada

    
por Juhan 21.09.2018 / 13:25

2 respostas

3

Com o GNU date ou busybox date , as implementações mais comuns de date encontradas em sistemas que usam o Linux como kernel:

if [ "$(date -r file +%Y%m)" = "$(date +%Y%m)" ]; then
  echo "file was last modified this month"
fi

(note que para links simbólicos, olha para o mtime do alvo).

POSIXly, o mesmo pode ser alcançado com:

(
  export LC_ALL=C; unset -v IFS
  eval "$(date +'cur_month=%b cur_year=%Y')"
  ls -Lnd file | {
    read -r x x x x x month x year_or_time x &&
      case $month-$year_or_time in
        ("$cur_month-$cur_year" | "$cur_month"-*:*)
          echo "file was last modified this month"
      esac
  }
)
    
por 21.09.2018 / 14:05
0

Você pode usar a combinação de find -ctime e date +%d (número de dias no mês atual) para isso. Todo o comando seria como:

find data/tmp/docs/test.txt -ctime -'date +%d'

Se o arquivo for mais recente, do que a quantidade de dias, ele mostrará a saída; caso contrário, a saída ficará vazia. Então, atribua a variável e verifique se ela está vazia

OUTPUT=$( find data/tmp/docs/test.txt -ctime -'date +%d' )
if [ -n "$OUTPUT" ] ; then echo "file created in current month" ; fi

Atualização: Como @ StéphaneChazelas mencionado nos comentários, -ctime não é hora de criação, é hora de mudança de status (fe chmod atualizará essa data), mas linux estat estrutura contém apenas:

time_t    st_atime   time of last access
time_t    st_mtime   time of last data modification
time_t    st_ctime   time of last status change

Então, a ctime do IMHO é a melhor escolha, se não houver alterações de status no arquivo após a criação.

    
por 21.09.2018 / 13:36