
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 cp
seguido do nome do arquivo que corresponde às condições anteriores e de um literal bak/
--- na exec
clá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 zsh
porque 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 cp
o comando. Para copiar vários arquivos, consulteesse.