Rsync deux types de fichiers en une seule commande?

13

Comment les écrire sur une seule ligne, sans répéter le même chemin?

rsync -a root@somewhere:/folder/remote/*.txt .
rsync -a root@somewhere:/folder/remote/*.jpg .
Cheng
la source

Réponses:

18

Je l'écrirais comme ceci:

rsync -a root@somewhere:/folder/remote/*.{txt,jpg} .
Gert
la source
7
Il s'agit d'une technique générale que vous pouvez utiliser avec n'importe quelle commande. Le shell répète l'argument en remplaçant l'expression d'accolade par chaque élément de la liste. C'est ce qu'on appelle l' accolade
Shawn J. Goff
11
rsync -a --include='*.txt' --include='*.jpg' --exclude='*' root@somewhere:/folder/remote/ .

(Notez que la finale /dans /folder/remote/et le placement --exclude='*'après les règles d'inclusion sont importants.) Dans les shells qui prennent en charge l'expansion des accolades (par exemple bash, ksh, zsh):

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

Ajoutez --include='*/' --prune-empty-dirssi vous souhaitez également copier des fichiers dans des sous-répertoires.

Gilles 'SO- arrête d'être méchant'
la source
rsync 3 * semble échouer sur les caractères génériques *, l'inclusion | exclure fonctionne bien.
briankip