Jak skopiować wszystkie pliki i katalogi, z wyjątkiem niektórych przez ssh?


23

Korzystając z wiersza poleceń systemu Linux, używam scppolecenia, aby skopiować wszystkie pliki i foldery z określonego katalogu. Jednak nie lubię zużywać przepustowości, do kopiowania rzeczy rzadko zmieniam, jak mój tiny_mcefolder. Jaki jest sposób na skopiowanie wszystkiego, ale pomiń krótką listę folderów?

Odpowiedzi:


19

rsyncdziała dobrze, aw większości przypadków automatycznie używa SSH jako protokołu transportowego. Porówna pliki i prześle tylko te, które uległy zmianie - ale możesz także użyć listy wykluczeń, aby określić pliki w drzewie, których i tak nie należy synchronizować.


rsync nie używa SSH automatycznie - w tym celu należy podać flagi „-e ssh”.

4
Tak. Wydano Rsync 2.6.0 - Domyślną zdalną powłoką jest teraz „ssh”, chyba że powiesz configowi, że chcesz ustawić coś innego jako domyślną. samba.org/rsync

12

Możesz spróbować rsync, który kopiuje tylko zmienione pliki, działa również na ssh.


9

Użycie rsync --excludejest tutaj bardziej oczywistym wyborem, ale jeśli naprawdę chcesz po prostu wysłać kilka plików lub folderów i mieć coś specyficznego do wykluczenia, możesz użyć globowania powłoki scp. Najpierw upewnij się, że masz odpowiednie opcje globowania w swojej powłoce. Do uruchamiania basha shopt -s extglobi używania zsh setopt ksh_glob. Następnie coś takiego:

scp /path/to/folder/!(tiny_mce|other_folder|*.bak) user@host:target_path

... skopiuje wszystko z folderu źródłowego oprócz elementów pasujących do podanego wzorca. Oczywiście możesz być kreatywny dzięki tej części.


7

rsync jest dobrym rozwiązaniem, ale jeśli szukasz alternatywy:

Powiedzmy, że mamy katalog „test” zawierający katalogi „foo, bar, baz”. W tych katalogach znajduje się kilka różnych typów plików:

test
|____bar
| |____1.jpg
| |____1.png
| |____1.txt
| |____2.jpg
| |____2.png
| |____2.txt
|____baz
| |____1.avi
| |____2.avi
| |____3.png
|____foo
| |____test.blah
|____test.txt

Chcemy skopiować wszystko oprócz plików PNG

scp $(find /location/of/test -type f ! -name "*.png") # -> Note the logical NOT!!

W tym przykładzie polecenie umieści wszystkie pliki w tym samym katalogu docelowym - takie zachowanie może nie być pożądane.


1
Zauważ, że ta odpowiedź działa tylko wtedy, gdy nazwy plików i katalogów nie zawierają żadnych znaków specjalnych powłoki (białe znaki lub \[*?).
Gilles „SO - przestań być zły”,

3

Świetnym narzędziem, które możesz wypróbować, jest „lftp”.

lftp sftp://etc.etc/ 
lftp> ls 
    --- remote listing ---
lftp> mirror -R -n local/ remote/

Możesz także użyć RSync przez ssh

rsync -avzp -e ssh /this/dir/  remoteuser@remotehost:/remote/dir/

Powinno działać.


0

Właśnie skończyłem pisać, jak wolę unison niż rsync każdego dnia, od tego czasu

  • nie potrzebuje demona innego niż ssh do transportu
  • pozwala mi w dowolnym momencie modyfikować pliki po obu stronach - wielu mistrzów łatwo, podczas gdy muszę tylko przesłać żądanie synchronizacji z jednej strony
  • Jestem trędowaty, jeśli chodzi o modtimes, atrybuty / uprawnienia, softlinks itp. Nie ma z tym problemów; do jednego projektu używam nawet 4 serwerów lustrzanych, z których jeden jest hostem cygwin. Zobacz mój przykładowy zestaw crontab.
  • obsługuje wykluczenia takie jak *.bak. Próbki w moim pliku konfiguracyjnym

0

Korzystanie z bezpiecznego kopiowania - scp

scp -r file user@host:

Aby skopiować wiele plików

scp /directory/* user@host:destinationPath

Aby skopiować niektóre pliki

scp /directory/!(*.doc) user@host:destinationPath

Kopiuje zawartość katalogu oprócz plików .doc


0

Z pewnością poleciłbym ci rsync.

rsync -vra --exclude = "co chcesz wykluczyć" -e folder ssh użytkownik @ host zdalny: / folder


0

To działało dla mnie, gdy uruchomiłem go z serwera docelowego.

rsync -av --progress user@servername:/sourcefolder /destinationfolder --exclude thefoldertoexclude

0

Możemy to zrobić w dwóch krokach, aby zignorować tiny_mcekatalog. Zakładając, że wszystkie katalogi zaczynają się od małych liter.

scp -r USER@HOSTNAME:~/FOLDER/[a-s]* .
scp -r USER@HOSTNAME:~/FOLDER/[u-z]* .

Zmień także USER, HOSTNAME i FOLDER na wartości rzeczywiste.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.