rsync legge `--files-from` da bash array invece di file


2

È possibile ottenere rsync per leggere un elenco di file da includere da una matrice nello script attivo anziché da un file di accompagnamento?

## declare an array variable
declare -a files=("path" "path" "path")

rsync --files-from=${files[@]} source destination

C'è un modo migliore per farlo? Mi piacerebbe avere solo un file di script da gestire.

Risposte:


3

Puoi eseguire:

`rsync --files-from=<( printf "%s\n" "${files[@]}" ) source destination
  • <() apriremo un tubo e lo riempiremo del contenuto del comando interno. Restituisce un descrittore di file

  • printf "%s\n" "${files[@]}" echo ogni nome di file in una riga diversa


Grazie a @vera. Purtroppo sto ricevendo questo: + myFiles=(1\n 2\n 3\n) + rsync -avh --files-from=/dev/fd/63 /foo/ /bar/ ++ echo -e 1n 2n 3n building file list ... rsync: link_stat "/foo/1n 2n 3n" failed: No such file or directory (2) 0 files to consider
sansSpoon

Ok, vedo il problema: puoi usare printf invece di echo, quindi non devi aggiungere il finale "\ n". Ho modificato la risposta.
vera

Per me questo non funziona ho avuto errori con break-lines interpretati come # 012. Ho dovuto usare il carattere null: rsync --files-from=<( printf "%s\0" "${files[@]}" ) --from0 source destination
Etienne Prothon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.