Usando o find, os arquivos (e somente os arquivos) modificados no último dia são encontrados por:
find . -type f -mtime 1
para que você possa copiá-los com
find . -type f -mtime 1 -exec cp {} bak/ \;
Significado : encontre todas as entidades no diretório atual ( .
), do tipo "arquivo" ( -type f
), modificados pelo menos 1 dia a partir de agora ( -mtime 1
, mas é sutil, siga o link para saber mais), e para cada um deles execute o comando cp
seguido do nome do o arquivo que corresponde às condições anteriores e por um literal bak/
--- na cláusula exec
, o ponto e vírgula de fechamento (com escape para evitar que o shell o coma) fecha o comando e adicionalmente significa que o comando deve ser executado uma vez para cada partida.
Observe que a árvore de diretórios será mesclada na pasta bak/
, portanto talvez seja melhor usar um formato de arquivo.
Por exemplo, este é o meu script que faz um backup de todos os arquivos em meus diretórios de trabalho modificados hoje e a partir de dois dias em arquivos tar e, em seguida, move-os para meu diretório do Dropbox:
#! /bin/zsh
#
cd $HOME
today="today-$(hostname)".tar
twodays="twodays-$(hostname)".tar
mydirs=(bin Documents Templates texmf Desktop) # list your top-level working dirs here
rm -f $today $twodays
echo -n "Starting today and twodays backups... "
find $mydirs -type f -mtime -1 -exec tar rf $today {} +
find $mydirs -type f -mtime -2 -exec tar rf $twodays {} +
echo "backups done:"
ls -lh $today $twodays
echo "Moving to Dropbox"
mv $today $twodays $HOME/Dropbox
sleep 2
dropbox status
ele precisa de zsh
porque eu sou preguiçoso e não tentei me adaptar à estrutura de array de bash
, mas com certeza alguém aqui pode fazer isso (dica, dica) ...