como copiar arquivos como o “Robocopy” da Microsoft no debian?

2

Eu tenho tentado migrar pequenas partes da minha mídia / centro de downloads do Windows para o Linux antes de dar um salto na minha central de mídia. Agora eu tenho um pi framboesa criado, com raspbian, onde vou experimentar coisas diferentes antes de me mudar.

Neste momento, tenho o meu media center a transferir determinados ficheiros, que precisam de ser copiados de um directório para outro. Essa parte eu poderia fazer com os comandos mais básicos do Linux, mas o problema real está no manuseio desses arquivos quando copiados.

no windows eu tenho um script em lote em execução periodicamente, onde: Copia os arquivos de "a" para "b" e cria um arquivo de log. -a pasta de monitoramento de programa "b" move e renomeia os arquivos -o arquivo de log impede que o script copie os mesmos arquivos novamente e, assim, evita duplicatas na minha pasta de mídia.

O código é o seguinte:

ROBOCOPY "location A" "Location B" /NP /M /S /LOG+:c:\batches\Rename.log

Isso é possível realizar no linux e, se assim for, como?

    
por Nicolai 04.12.2014 / 23:20

2 respostas

6

O rsync é ótimo para esse tipo de coisa, você não precisa renomear nem nada, ele copia apenas o material novo ou atualizado. Tem muitas opções para alterar o comportamento de acordo com seus requisitos.

Por exemplo:

rsync -av /location/a/* /location/b
    
por 04.12.2014 / 23:47
0

No Linux você pode fazer qualquer coisa!

Você pode usar o crond para programar um processo para executar periodicamente e um script bash para copiar seus arquivos.

Digamos que você crie dois diretórios:

pi@raspberrypi2 ~ $ mkdir tmp
pi@raspberrypi2 ~ $ cd tmp/

pi@raspberrypi2 ~/tmp $ mkdir 1;mkdir 2

depois coloque um arquivo no diretório 1:

pi@raspberrypi2 ~/tmp $ touch 1/file1

Então você cria seu script como:

ej. script bash simples:

#!/bin/bash

for i in $(ls 1/);do
    if [ -e 2/$i ];then
        echo "File already copied to directory 2" >> logfile.log
    else
        cp 1/$i 2/$i
        if [ $? = 0 ];then 
            echo "File $i copied to directory 2" >> logfile.log
        else 
            echo "Error copying file $i to directory 2" >> logfile.log
        fi
    fi
done

que copia arquivos do diretório 1 para o diretório 2. E também grava uma mensagem em um arquivo de log usando o comando echo.

teste:

pi@raspberrypi2 ~/tmp $ ls 1/ 2/
1/:
file1

2/:
pi@raspberrypi2 ~/tmp $ bash script.sh
pi@raspberrypi2 ~/tmp $ ls 2/
file1
pi@raspberrypi2 ~/tmp $ cat logfile.log 
File file1 copied to directory 2
pi@raspberrypi2 ~/tmp $ bash script.sh 
pi@raspberrypi2 ~/tmp $ ls 2/
file1
pi@raspberrypi2 ~/tmp $ cat logfile.log 
File file1 copied to directory 2
File already copied to directory 2
pi@raspberrypi2 ~/tmp $ 

então você pode inserir um cronjob no crontab para executar o script periodicamente:

pi@raspberrypi2 ~/tmp $ crontab -e

# run the script at at 5 a.m every day:
0 5 * * * bash /home/pi/tmp/script.sh

salve o arquivo e verifique se o cronjob está instalado:

pi@raspberrypi2 ~/tmp $ crontab -l

0 5 * * 1 bash /home/pi/tmp/script.sh

apenas o script pode ser tanto quanto você gosta, esse exemplo é um ponto de partida.

NOTA: testado em runas Raspbian em Raspberry Pi A +:)

    
por 05.12.2014 / 00:04