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
다음은 원래 명령에 대한 몇 가지 대안입니다.
사용
rsync
rsync -ab myfile.ext [email protected]:/bar/baz
이
-b
플래그는rsync
대상 파일이 변경된 경우 백업이 수행되도록 지시합니다. 기본값은 추가~
이지만 이 기본값을 변경할 수 있습니다. 예를 들어, 다음은 오늘 날짜(소스 머신에 정의된 대로)를 사용합니다.rsync -ab --suffix ".$(date +'%Y%m%d')" myfile.ext [email protected]:/bar/baz
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