데비안에서 Microsoft의 "Robocopy"와 같은 파일을 복사하는 방법은 무엇입니까?

데비안에서 Microsoft의 "Robocopy"와 같은 파일을 복사하는 방법은 무엇입니까?

저는 미디어 센터로 이동하기 전에 미디어/다운로드 센터의 일부를 Windows에서 Linux로 마이그레이션하려고 했습니다. 이제 Raspbian으로 Raspberry Pi를 설정했으므로 이동하기 전에 여기에서 다양한 작업을 시도해 보겠습니다.

이제 내 미디어 센터에서 일부 파일을 다운로드하고 있으며 해당 파일을 한 디렉터리에서 다른 디렉터리로 복사해야 합니다. 가장 기본적인 Linux 명령을 사용하여 이 부분을 수행할 수 있지만 실제 문제는 파일이 복사될 때 파일에 어떤 일이 발생하는지에 있습니다.

Windows에는 주기적으로 실행되는 배치 스크립트가 있습니다. - "a"에서 "b"로 파일을 복사하고 로그 파일을 생성합니다. -a 프로그램은 파일 이동 및 이름 변경을 위해 폴더 "b"를 감시합니다. 로그 파일은 스크립트가 동일한 파일을 다시 복사하는 것을 방지하여 미디어 폴더에 중복 파일이 나타나는 것을 방지합니다.

코드는 아래와 같이 표시됩니다.

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

리눅스에서 이것이 가능합니까? 가능하다면 어떻게 달성할 수 있나요?

답변1

rsync는 이런 종류의 작업에 적합합니다. 이름을 바꾸거나 다른 작업을 수행할 필요가 없으며 새 콘텐츠나 업데이트된 콘텐츠만 복사하면 됩니다. 요구 사항에 따라 동작을 변경할 수 있는 다양한 옵션이 있습니다.

예를 들어:

rsync -av /location/a/* /location/b

답변2

리눅스에서는 무엇이든 할 수 있습니다!

crond를 사용하여 주기적으로 실행할 프로세스를 작성하고 bash 스크립트를 사용하여 파일을 복사할 수 있습니다.

두 개의 디렉터리를 생성한다고 가정해 보겠습니다.

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

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

그런 다음 파일을 디렉터리 1에 배치합니다.

pi@raspberrypi2 ~/tmp $ touch 1/file1

그런 다음 다음과 같이 스크립트를 만듭니다.

예. 간단한 bash 스크립트:

#!/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

디렉터리 1에서 디렉터리 2로 파일을 복사합니다. 또한 echo 명령을 사용하여 메시지를 로그 파일에 기록합니다.

시험:

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 $ 

그런 다음 crontab에 cronjob을 삽입하여 정기적으로 스크립트를 실행할 수 있습니다.

pi@raspberrypi2 ~/tmp $ crontab -e

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

파일을 저장하고 cronjob이 설치되어 있는지 확인합니다.

pi@raspberrypi2 ~/tmp $ crontab -l

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

원하는 대로 스크립트를 작성할 수 있습니다. 이 예가 시작점입니다.

참고: Raspberry Pi A+에서 실행되는 Raspbian에서 테스트되었습니다. :)

관련 정보