Muszę skopiować wszystkie pliki .class z serwera na lokalny, zachowując cały katalog zarezerwowany. np. server:/usr/some/unknown/number/of/sub/folders/me.class
będzie /usr/project/backup/some/unknown/number/of/sub/folders/me.class
problem, jest wiele innych bezużytecznych plików, takich jak pliki .svn-base, których nie chcę. jak mogę je filtrować, więc tylko scp
pliki .class?
99
Odpowiedzi:
Prawdopodobnie poleciłbym użycie czegoś takiego
rsync
ze względu na jegoinclude
iexclude
flagi, np: -Kilka innych przydatnych flag:
-r
dla rekurencyjnych-a
do archiwum (głównie wszystkie pliki)-v
dla pełnych informacji wyjściowych-e
aby określić ssh zamiast domyślnego (właściwie powinno to być ssh)źródło
-a
już zawiera-r
.--prune-empty-dirs
usunie puste katalogi.Aby wykluczyć dotfiles w katalogu podstawowym:
[!.]*
jest globalną powłoką, która rozwija się do wszystkich plików w katalogu roboczym, a nie zaczyna się od kropki.źródło
scp -r [\!.]* server:/path/to/something
W scp nie ma funkcji filtrowania plików. W przypadku „zaawansowanych” rzeczy, takich jak ten, zalecam użycie rsync:
(ta linia kopiuje rsync z odległego folderu do bieżącego)
Najnowsze wersje tunelu rsync przez połączenie ssh domyślnie automatycznie.
źródło
Ponieważ możesz
scp
, powinieneś być w porządkussh
,wykonaj skrypt lub zaloguj się i wykonaj ...
wróć (wylogowania) na serwerze lokalnym i
scp
,Jeśli okaże się, że
$(find ...)
jest za długi, aby zmienić format na,Wreszcie, skoro go trzymasz
/usr/project/backup/
, po cozawracać sobie głowę ekstrakcją? Po prostu zachowaj
tar.bz2
, może z datą i znacznikiem czasu.źródło
rsync
issh
zainstalować w systemie operacyjnym. Zamiast tego było to sprytne obejście. Dzięki!Poniżej polecenie dla plików.
scp `find. -maxdepth 1 -name "* .log" \! -name "hs_err_pid2801.log" -type f` root @ IP: / tmp / test /
Poniżej polecenie dla katalogu.
scp -r `znajdź. -maxdepth 1 -name "lo *" \! -name "localhost" -type d` root @ IP: / tmp / test /
możesz dostosować powyższe polecenie zgodnie z wymaganiami.
źródło
Po włączeniu uwierzytelniania opartego na kluczu ssh działałby następujący skrypt.
źródło
Jeśli rzeczywiście chcesz używać scp, istnieje pośredni sposób. Powiedzmy, że chcemy skopiować cały plik .jpg z folderu lokalnego „/ src” do folderu „/ dst” na serwerze zdalnym 10.1.1.2:
źródło
źródło
Skopiuj folder źródłowy do
somedir
:cp -r
srcdir
somedir
Usuń wszystkie niepotrzebne pliki:
znajdź katalog -nazwa '.svn' -exec rm -rf {} \ +
uruchom scp z
somedir
źródło
tar
lubzip
-file. Zamiast tego nie ma kompresji (scp wykonuje kompresję), a „spakowany” kod jest kopiowany.