Zsynchronizować dwa typy plików w jednym poleceniu?

13

Jak zapisać je w jednym wierszu, również bez powtarzania tej samej ścieżki?

rsync -a root@somewhere:/folder/remote/*.txt .
rsync -a root@somewhere:/folder/remote/*.jpg .
Cheng
źródło

Odpowiedzi:

18

Napisałbym tak:

rsync -a root@somewhere:/folder/remote/*.{txt,jpg} .
Gert
źródło
7
Jest to ogólna technika, której można używać z dowolnym poleceniem. Powłoka powtórzy argument, zastępując wyrażenie nawiasu klamrowego każdym elementem na liście. Nazywa się to ekspansją nawiasów klamrowych
Shawn J. Goff,
11
rsync -a --include='*.txt' --include='*.jpg' --exclude='*' root@somewhere:/folder/remote/ .

(Należy pamiętać, że ostatecznym /IN /folder/remote/i umieszczenia --exclude='*'po to zasady są ważne). W muszli że ekspansja wsparcie mocujący (np bash, ksh, zsh):

rsync -a --include='*.'{txt,jpg} --exclude='*' root@somewhere:/folder/remote/ .

Dodaj, --include='*/' --prune-empty-dirsjeśli chcesz również skopiować pliki do podkatalogów.

Gilles „SO- przestań być zły”
źródło
rsync 3 * wydaje się nie działać na * znakach wieloznacznych, ale włączanie | wykluczanie działa dobrze.
briankip