copiar arquivos por data

3

Como posso copiar arquivos em uma pasta com base em quando o arquivo foi editado pela última vez? Digamos que eu queira copiar todos os meus arquivos que eu pela última vez hoje de c: para minha pasta bak . Como posso conseguir isso?

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

cp source destination

por exemplo,

cp *.c bak

Alguma sugestão?

    
por John 24.11.2015 / 13:14

2 respostas

3

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) ...

    
por Rmano 24.11.2015 / 14:44
0

Você pode especificar primeiro qual arquivo modificou por último na sua pasta atual com o comando

ls -lt

Ou, você quer especificar qual arquivo que você acessa por último com o comando

ls -ltu

Depois disso, você pode copiar o arquivo com o comando cp . Para copiar vários arquivos, consulte this .

    
por adadion 24.11.2015 / 14:44