Jak skopiować cały katalog do katalogu o tej samej nazwie bez zastępowania zawartości katalogu docelowego? (zamiast tego chciałbym dodać do zawartości folderu docelowego)
Jak skopiować cały katalog do katalogu o tej samej nazwie bez zastępowania zawartości katalogu docelowego? (zamiast tego chciałbym dodać do zawartości folderu docelowego)
Odpowiedzi:
Użyj rsync
i przekaż, -u
jeśli chcesz aktualizować tylko pliki nowsze w oryginalnym katalogu lub --ignore-existing
pomijać wszystkie pliki, które już istnieją w miejscu docelowym.
rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
(Zwróć uwagę /
na stronę źródłową: bez niej rsync
stworzyłaby /remote/directory/directory
.)
--ignore-existing
dodaje bez zastępowania, jaką widzisz utratę danych?
rsync
łatwo dostępny .... (jak Win32-OpenSSH)
--rsync-path
potrzebny jest pakiet innej firmy )
scp nadpisze pliki, jeśli masz do nich uprawnienia do zapisu.
Innymi słowy: Możesz scp
skutecznie pominąć wspomniane pliki, tymczasowo usuwając na nich uprawnienia do zapisu (jeśli jesteś właścicielem plików).
scp -r user@server.com:/location/of/files/* /local/location/
Możesz skopiować tylko nowe pliki według daty. Posługiwać sięfind
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
Jeśli możesz ustawić zawartość pliku docelowego tylko do odczytu:
find . -type f -exec chmod a-w '{}' \;
przed uruchomieniem scp
(narzeka i pomija istniejące pliki).
I zmień je później ( chmod +w
aby uzyskać wartość na podstawie umask). Jeśli nie wszystkie pliki mają uprawnienia do zapisu zgodnie z umask, będziesz musiał jakoś przechowywać uprawnienia, aby móc je przywrócić.
(Odpowiedź Gillesa zastępuje istniejące pliki, jeśli lokalnie są one nowsze, w ten sposób straciłem cenne dane. Nie rozumiem, dlaczego ta błędna i szkodliwa odpowiedź ma tak wiele głosów).
rsync --ignore-existing
spowodowałeś utratę danych?
find: missing argument to '-exec'
przy użyciu tej komendy, a zamiast tego musiał użyć: find . -type f -exec chmod a-w {} \;
. Mój Linux jest zły, ymmv.
find . -type f -exec chmod a-w {} \;
Miałem podobne zadanie, w moim przypadku nie mogłem użyć rsync
, csync
lub FUSE ponieważ mój przechowywanie ma tylko SFTP. rsync
nie można zmienić daty i godziny pliku, niektóre inne narzędzia (jak csync
) pokazały mi inne błędy: „ Nie można utworzyć pliku tymczasowego Wykryto przesunięcie zegara ”.
Jeśli masz dostęp do serwera pamięci - po prostu zainstaluj tutaj openssh-server
lub uruchom rsync
jako demon.
W moim przypadku - nie mogłem tego zrobić, a rozwiązaniem było: lftp . lftp
wykorzystanie do synchronizacji jest poniżej:
lftp -c "open -u login,password sftp://sft.domain.tld/; \
mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder
- jest folderem na moim komputerze, /rem/folder
- jest sftp://sft.domain.tld/rem/folder
.
Możesz znaleźć strony man pod linkiem: http://lftp.yar.ru/lftp-man.html
Aby skopiować całą wiązkę plików, szybciej je tar. Używając -k zapobiegasz również zastępowaniu plików tar podczas rozpakowywania ich w systemie docelowym.
tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
scp
nadpisuje pliki i nie ma przełącznika, aby to zrobić, ale możesz skopiować rzeczy po drodze, wykonać scp, a następnie skopiować istniejące pliki z powrotem. Przykłady:
Skopiuj wszystkie istniejące pliki
mkdir original_files ; cp -r * original_files/
Skopiuj wszystko za pomocą scp
scp -r user@server:dir/* ./
Skopiuj oryginalne pliki na cokolwiek, co scp napisał:
cp -r original_files/* ./
Innym sposobem na osiągnięcie tego jest wykonanie ls
w folderze docelowym:
W zdalnym folderze docelowym:
ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
U źródła:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
Na miejscu:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
-
>
spację nowej linii lub inne znaki specjalne. 3. Zakoduj na stałe pętlę for w skrypcie python. Generowanie programu w czasie wykonywania jest trudne i trudne (nawet jeśli jest wykonywane przez profesjonalnych programistów) z wielu powodów. Generowanie skryptu powłoki jest jeszcze gorsze - okropny pomysł.