scp로 원본 파일 백업

scp로 원본 파일 백업

scp를 사용하여 덮어쓰려는 파일이 있는 원격 호스트가 있습니다. 이것은 간단하다

scp 'myfile.ext' '[email protected]:/bar/baz'

또한 새 버전으로 덮어쓰는 대신 원본 "/bar/baz/myfile.xt"를 파일로 "이름 바꾸기"를 원합니다. 간단한 "/bar/baz/myfile.xt~"이면 충분하지만 카운터나 현재 날짜가 더 좋습니다.

scp로 할 수 있는 방법이 있나요?

항상 대화형 비밀번호를 입력해야 하기 때문에 "scp" 호출을 최소화하고 싶습니다. (아니요, 인증 방법을 변경할 수 없습니다.)

답변1

카운터나 날짜 접미사를 사용하여 원래 이름의 이름을 더 나은 이름 /bar/baz/myfile.xt으로 바꾸고 싶습니다 ./bar/baz/myfile.xt~

를 사용하여 이 작업을 직접 수행할 수는 없지만 scp다음은 원래 명령에 대한 몇 가지 대안입니다.

  1. 사용rsync

    rsync -ab myfile.ext [email protected]:/bar/baz
    

    -b플래그는 rsync대상 파일이 변경된 경우 백업이 수행되도록 지시합니다. 기본값은 추가 ~이지만 이 기본값을 변경할 수 있습니다. 예를 들어, 다음은 오늘 날짜(소스 머신에 정의된 대로)를 사용합니다.

    rsync -ab --suffix ".$(date +'%Y%m%d')" myfile.ext [email protected]:/bar/baz
    
  2. ssh와 함께 사용됩니다 scp. 나는 이것이 baz소스 파일이 복사될 디렉터리가 아니라 대상 파일의 이름이라고 가정합니다.

    ssh [email protected] 'cp -p /bar/baz /bar/baz."$(date +'%Y%m%d')"' &&
    scp -p myfile.ext [email protected]:/bar/baz
    

    원하는 경우 mv대신 을 사용할 수 있지만 cp이렇게 하면 실제 대상 파일에 대한 비표준 권한과 하드 파일 링크가 손실됩니다.

rsync옵션은 더 깔끔하지만 항상 설치되는 것은 아닙니다.

답변2

반드시 그럴까요 scp? 나는 그것이 당신을 위해 파일 이름을 바꿀 수 있다고 생각하지 않습니다(원격 복사를 제외하고, 그것이 얼마나 잘 작동할지는 확신하지 못했습니다.)

sftp일이 꽤 간단해질 텐데

$ echo -e 'rename test test.old\nput test' | sftp user@hostname

ssh다음을 사용하여 이 작업을 수행할 수도 있습니다.test

$ cat test | ssh user@hostname 'mv test "test.$(date +%F_%T)"; cat > test'

답변3

당신은 그것을 사용할 수 있습니다mirrordir

Mirror ~/scripts to ~/scripts.backup:
$ mkdir ~/scripts.backup
$ mirrordir -v ~/scripts ~/scripts.backup

If you rerun mirrordir again, only the updated files are copied.

You can mirroring FTP sites:
$ mirrordir -v ftp://ftp.nixcraft.in/pub /home/backup/nixcraft.in/ftp/pub

mirrordir offers tons of option, refer mirrordir man page for more examples and options:
$ man mirrordir

관련 정보