Rsync su percorso SSH con spazi non funziona con le virgolette


17

Sono in grado di eseguire correttamente RSYNC su SSH purché i percorsi non contengano spazi.

Quando il percorso ha spazi, non funziona. Ho provato barre, virgolette e virgolette doppie.

Quando uso le barre, l'output indica che è un successo ma non vedo alcun file trasferito.

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

Quando utilizzo virgolette singole o doppie, mi viene comunicato che l'autorizzazione viene negata dopo aver inserito la mia password

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Cosa posso fare?

Grazie.

Risposte:


12

Espandendo la risposta di rzr con codice di esempio e riferimenti, basta aggiungere il -sflag, citare i percorsi e non preoccuparti di sfuggire agli spazi nel percorso remoto:

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Per riferimento, le opzioni specificate dall'OP:

  • -a, modalità archivio, uguale a -rlptgoD (no -H, -A, -X)
    • include:
    • -r, --recursive, recurse in directory
    • -l, --link, copia i symlink come symlink
    • -p, --perms, conserva le autorizzazioni
    • -t, --times, conserva i tempi di modifica
    • -g, --group, preserva gruppo
    • -o, --owner, preserva il proprietario (solo per superutente)
    • -dispositivi, preserva i file del dispositivo (solo per superutente)
    • -speciali, conserva file speciali
  • -v, --verbose, aumenta la verbosità
  • -z, --compress, comprime i dati del file durante il trasferimento

Il parametro aggiuntivo necessario:

  • -s, --protect-args, senza divisione di spazi, solo caratteri jolly

13

È necessario uscire dagli spazi sia nella shell locale che nella shell remota. Prova questo:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

La fonte, /path with spaces/nella shell locale, può essere sfuggita solo inserendo virgolette singole, ad es '/path with spaces/'.

D'altra parte, nel caso della destinazione, la shell locale viene salvata inserendo virgolette singole e gli spazi vengono salvati nella shell remota usando il carattere escape ( \) davanti agli spazi.


3
Solo per enfatizzare, sono necessarie ENTRAMBE virgolette e barre rovesciate.
Sridhar Sarnobat,

2

guarda l'opzione rsync –protect-args (-s), non sono necessarie altre barre


1
La tua risposta sarebbe molto migliorata se fornissi un esempio che l'utente inesperto potrebbe seguire. Grazie!
Elder Geek,
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.