Eu tenho no mínimo 30 arquivos em um diretório que contém datas mais antigas, ou seja, dos últimos 7 dias. Agora preciso compactá-los com base na data de criação/modificação do arquivo.
Por exemplo,
10 arquivos com 7 de abril -- crie um zip para april7.zip
10 arquivos com 8 de abril -- crie um zip para april8.zip
10 arquivos com 9 de abril -- crie um zip para april9.zip
Responder1
O usual find -mtime
é um pouco difícil de usar aqui, pois testa apenas a idade em relação ao momento atual.
Com GNU date e Bash poderíamos fazer algo assim para adicionar cada arquivo a um arquivo correspondente à data do arquivo:
for f in * ; do
zip $(date -r "$f" +%F).zip "$f" # 2017-04-07.zip
done
ou:
for f in * ; do
d=$(date -r "$f" +%B%d)
zip ${d,,}.zip "$f" # april07.zip
done # ${var,,} is for lowercase
( date
só é possível ler a hora da modificação. Pois ctime
precisaríamos usar stat
e trabalhar mais para corrigir o formato de saída.)
Se, por algum motivo, precisarmos obter uma lista de todos os arquivos de uma determinada data antes do processamento, poderíamos coletá-los em um array:
files=()
date="2017-04-07"
for f in * ; do
[ "$(date -r "$f" +%F)" = "$date" ] && files+=("$f")
done
# do something with "${files[@]}', e.g.
# zip $date.zip "${files[@]}"
Como tal, isso lidaria apenas com uma única data por vez.