Copia arquivos de um diretório para outro, ignorando arquivos em que o arquivo do destino foi modificado na última hora?

0

Tentativa de descobrir um comando para copiar arquivos se o arquivo do destino (não da fonte) não tiver sido modificado na última hora.

    
por James 25.07.2018 / 23:54

2 respostas

0

Não conheço nenhum comando que corresponda exatamente à sua necessidade. Algo como isso deve funcionar (remova o --dry-run quando tiver certeza de que está satisfeito com o resultado; substitua o --verbose por --quiet se desejar que ele seja executado de forma mais silenciosa):

src=/path/to/source
dst=/path/to/target

comm -z -23 \
        <(find "$src" -type f -printf '%P
src=/path/to/source
dst=/path/to/target

comm -z -23 \
        <(find "$src" -type f -printf '%P%pre%' | sort -z) \
        <(find "$dst" -type f -mmin -60 -printf '%P%pre%' | sort -z) |
    rsync --dry-run --verbose --archive --from0 --files-from - "$src" "$dst"
' | sort -z) \ <(find "$dst" -type f -mmin -60 -printf '%P%pre%' | sort -z) | rsync --dry-run --verbose --archive --from0 --files-from - "$src" "$dst"

Ele assume utilitários relativamente recentes que entendem como lidar com linhas terminadas em NUL. Se necessário, e desde que você possa garantir que nenhum nome de arquivo contenha novas linhas, remova os três -z flags e rsync 'co_de% e substitua o --from0 nos comandos find por \n .

    
por 26.07.2018 / 00:28
0

Se todas as suas cópias forem para arquivos existentes, você pode ver de outra maneira: sobrescrever arquivos locais, se tiverem mais de uma hora. Portanto, com o diretório destination como o diretório de trabalho:

find . -mindepth 1 -maxdepth 1 -type f -mmin +60 -exec cp /source/directory/{} . \;

onde:

  • find . -mindepth 1 -maxdepth 1 -type f -mmin +60 encontra os arquivos locais com mais de uma hora
  • -exec cp /source/directory/{} . \; sobrescreve-os com seus homônimos de /source/directory
por 26.07.2018 / 00:34