copiar arquivos por data

copiar arquivos por data

Como posso copiar arquivos em uma pasta com base na data em que o arquivo foi editado pela última vez? Digamos que eu queira copiar todos os meus arquivos queúltima edição hojedec:para minha pastaok. Como posso conseguir isso?

Eu sei que um comando de cópia normal pode ser feito assim:

cp source destination

por exemplo.

cp *.c bak

Alguma sugestão?

Responder1

Usando 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),modificado 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 cpseguido do nome do arquivo que corresponde às condições anteriores e de um literal bak/--- na execcláusula, o ponto e vírgula de fechamento ( escapou para evitar que a casca 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á achatada na bak/pasta, então talvez seja melhor usar um formato de arquivo.

Por exemplo, este é o meu script que faz um backup de todos os arquivos nos meus diretórios de trabalho modificados hoje e há dois dias nos arquivos tar e depois os move para o 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

precisa zshporque sou preguiçoso e não tentei me adaptar à estrutura do array do bash, mas com certeza alguém aqui consegue fazer isso (dica, dica)...

Responder2

Você pode primeiro especificar qual arquivo foi modificado por último em sua pasta atual com o comando

ls -lt

Ou você deseja especificar qual arquivo será acessado por último com o comando

ls -ltu

Depois disso, você pode copiar o arquivo com cpo comando. Para copiar vários arquivos, consulteesse.

informação relacionada