Rsync su percorso SSH con spazi non funziona con le virgolette

12

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

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

Quando utilizzo 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 uso le virgolette singole o doppie, mi dice che il permesso è stato negato dopo aver inserito la mia password

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

Che cosa posso fare?

Grazie.

    
posta AndrewMRiv 16.03.2015 - 20:17
fonte

3 risposte

6

Espandere la risposta di rzr con codice di esempio e riferimenti, basta aggiungere il flag -s , 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, equivale a -rlptgoD (no -H, -A, -X)
    • Include:
    • -r, --recursive, recurse nelle directory
    • -l, --links, copia i link simbolici come collegamenti simbolici
    • -p, --perms, preserva le autorizzazioni
    • -t, --times, preserva i tempi di modifica
    • -g, --group, preserve group
    • -o, --owner, preserva proprietario (solo per superutente)
    • -dispositivi, conserva i file del dispositivo (solo per superutente)
    • -speciali, conserva i file speciali
  • -v, --verbose, aumenta la verbosità
  • -z, --compress, comprime i dati del file durante il trasferimento

Il parametro aggiuntivo necessario:

  • -s, --protect-args, nessun tag con spazio jolly, solo caratteri jolly
risposta data binarysubstrate 01.02.2016 - 19:04
fonte
13

È necessario sfuggire agli spazi sia nella shell locale che nella shell remota. Prova questo:

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

L'origine, /path with spaces/ nella shell locale può essere sottoposta a escape solo mettendo le virgolette attorno ad essa, ad esempio '/path with spaces/' .

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

    
risposta data heemayl 16.03.2015 - 20:29
fonte
1

guarda l'opzione rsync -protect-args (-s), nessuna barra in più necessaria

    
risposta data rzr 08.06.2015 - 02:47
fonte

Leggi altre domande sui tag