it-swarm-eu.dev

scp bez nahrazení existujících souborů v cílovém umístění

Jak zkopíruji celý adresář do adresáře se stejným názvem, aniž bych nahradil obsah v cílovém adresáři? (místo toho bych chtěl přidat k obsahu cílové složky)

169
biznez

Použijte rsync a předejte -u Pokud chcete aktualizovat pouze soubory, které jsou v původním adresáři novější, nebo --ignore-existing pro přeskočení všech souborů, které již v cíli existují.

rsync -au /local/directory/ Host:/remote/directory/
rsync -a --ignore-existing /local/directory/ Host:/remote/directory/

(Poznámka: / na straně zdroje: bez něj rsync by vytvořilo /remote/directory/directory.)

scp přepíše soubory, pokud k nim máte oprávnění k zápisu.

Jinými slovy: scp můžete efektivně přeskočit zmíněné soubory dočasným odebráním oprávnění k zápisu na ně (pokud jste vlastníkem souborů, to je).

88
Reimund

Můžete kopírovat pouze nové soubory podle data. Použít find

scp  `find /data/*.gz -type f -mtime +7` [email protected]:/backup/
12
Naks

Pokud můžete nastavit obsah cílového souboru jen pro čtení:

find . -type f -exec chmod a-w '{}' \;

před spuštěním scp (stěžuje si a přeskočí stávající soubory).

A poté je změňte (chmod +w pro získání hodnoty založené na umask). Pokud všechny soubory nemají oprávnění k zápisu podle vašeho umask, měli byste nějakým způsobem uložit oprávnění, abyste je mohli obnovit.

(Gillesova odpověď přepíše existující soubory, pokud jsou místně novější, tak jsem ztratil cenná data. Nechápu, proč má špatná a škodlivá odpověď tolik hlasů).

10
Mohad

Chcete-li kopírovat celou řadu souborů, je rychlejší je dehovat. Použitím -k také zabráníte přepisování souborů dehtu při jejich rozbalení v cílovém systému.

tar -c <source-dir> | ssh <name>@<Host> 'tar -kxzf - -C <target-dir>' 
7
huembi

Měl jsem podobný úkol, v mém případě jsem nemohl použít rsync, csync nebo Fuse, protože moje úložiště má pouze SFTP. rsync nemohl změnit datum a čas souboru, některé další nástroje (jako csync) mi ukázaly další chyby: " Nelze vytvořit dočasný soubor Zjištěna zkreslení hodin ".

Pokud máte přístup k úložnému serveru - stačí nainstalovat openssh-server nebo spusťte rsync jako démona zde.

V mém případě - nemohl jsem to udělat a řešením bylo: lftp . Využití lftp pro syncronizaci je níže:

lftp -c "open -u login,password sftp://sft.domain.tld/; \
    mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"

/src/folder - je složka v mém počítači, /rem/folder - je sftp://sft.domain.tld/rem/folder.

Mužské stránky najdete pod odkazem: http://lftp.yar.ru/lftp-man.html

6
bolD

scp přepisuje soubory a není tam žádný přepínač, který by to zastavil, ale můžete věci zkopírovat, udělat scp a poté zkopírovat stávající soubory zpět. Příklady:

  1. Zkopírujte všechny existující soubory

    mkdir original_files ; cp -r * original_files/
    
  2. Zkopírujte vše pomocí scp

    scp -r [email protected]:dir/* ./
    
  3. Zkopírujte původní soubory na cokoli, co scp napsal:

    cp -r original_files/* ./
    
0
A.Badger