2012-11-16 7 views
34

Kopiowałem niektóre pliki za pomocą scp i nie chcę nadpisywać już istniejących plików.Zapobieganie nadpisywaniu plików podczas używania Scp

Jeśli używałem polecenia cp, myślę, że można to zrobić za pomocą cp -n.

Czy istnieje podobna opcja dla scp, przejrzałem dokumentację SCP i wydaje się, że nie ma takiej opcji.

Czy rsync lub sftp są sposobem rozwiązania tego problemu?

Dodanie informacji:

OS: Ubuntu 12.04

Odpowiedz

33

rsync wydaje się być rozwiązaniem Twojego problemu. Oto przykład dostałem od here:

rsync -avz foo:src/bar /data/tmp 

Opcja -a zachowa uprawnienia, strukturę katalogów, własności i dowiązania symboliczne. Możesz także podać dowolną z tych opcji indywidualnie.

-v i -z odpowiednio słownie i kompresuj. Tak naprawdę ich nie potrzebujesz, chociaż -z jest dobre, jeśli kopiujesz duże pliki.

-1

Nie przetestowałem tego, ale może najpierw zamontowałem przez sshfs, a następnie użyłem cp.

0

Używałem rsync w przeszłości do tego, ale znalazłem się próbując złapać z okna systemu z CopSSH i bez rsync :-(Poniższe działało dobrze dla mnie, używając testów plików, aby wyeliminować pliki, które mogłyby nadpisane, a generowanie mutiple „get” prośby do sftp instancji.

( echo 'cd work/ftp/' ; 
    ssh <user>@<machine> 'cd work/ftp/ && ls -1 ITEM_SALE_SUMMARY_V.*.dat.xz' | 
    while read line; do [[ -f "$line" ]] || echo get "$line"; done 
) | sftp <user>@<machine> 

na wszelki wypadek inni potrzebują non-rsync rozwiązanie!

15

właśnie znalazłem prosty siekać. Zaznaczyć istniejące pliki jako przeczytane - tylko

+0

To ma sens, jeśli nie chcesz, aby zastąpić istniejące pliki : 'chmod uw srcfile; scp -p srcfile $ USER @ $ host: katalog $/'. Ze strony scp man: '-p Zachowuje czasy modyfikacji, czasy dostępu i tryby z oryginalnego pliku." –

7
rsync -avz --ignore-existing /source folder/* [email protected]:/dstfolder/ 

--ignore-existing nie zastąpi plików na serwerze zdalnym lub docelowym *.

0

Wystarczy uzupełnić inne rozwiązania:

Dla jednego pliku ASCII/bin, można zrobić to z:

cat source_file | ssh host "test ! -f target_file && cat > target_file"