2012-05-23 12 views
11

Próbuję napisać prosty skrypt bash dla mojego lokalnego komputera (Mac OS X), aby przenieść pliki z katalogu na moim komputerze na zdalną maszynę. Linia ta zawodzi:Skrypty Bash rsync: rsync: link_stat (blah) nie powiodło się: brak takiego pliku lub katalogu (2)

rsync --verbose --progress --stats --compress --rsh=ssh \ 
     --recursive --times --perms --links --delete \ 
     --exclude "*bak" --exclude "*~" \ 
     /repository/* $DEV_SERVER:$REMOTE_DIR 

$DEV_SERVER i $REMOTE_DIR są zdefiniowane wcześniej, a ja echo ich do sprawdzenia są dokładne.

Błąd Dostaję jest:

rsync: link_stat /Users/myusername/mycurrentdirectory failed: No such file or directory (2) 

Aby zwrócić uwagę jest to, że zamiast używać zdefiniowany katalog (/repository, który znajduje się w katalogu głównym urządzenia), używa mój katalog roboczy. Co to powoduje?

+2

podać swój zmiennych, proszę! –

Odpowiedz

23

Sprawdź, czy twoje \ znaków nie ma spacji po czym na końcu linii, ponieważ spowoduje to bash nie poprawnie zinterpretować zawijanie linii, dając błąd rsync powyżej

+2

Ty .... właśnie skończyłeś 2 godziny ciągnięcia za włosy. Kocham Cię. –

-2

to:

rsync --verbose --progress --stats --compress --rsh=ssh \ 
    --recursive --times --perms --links --delete \ 
    --exclude "*bak" --exclude "*~" \ 
    /repository/* $DEV_SERVER:$REMOTE_DIR 

powinno być tak:

rsync --verbose --progress --stats --compress --rsh=ssh --recursive --times --perms --links --delete --exclude "*bak" --exclude "*~" /repository/* $DEV_SERVER:$REMOTE_DIR 

Bash interpretuje charakter \ inaczej niż w wierszu polecenia, a może istnieje niejawna non-biały znak po nim.

+0

W jaki sposób bash obsługuje je inaczej w sesjach nieinteraktywnych? – jordanm

+0

lepiej nadaje się do superuser.com –

+3

Jedyny problem miałem z użyciem kontynuacji wiersza-char (czyli '\'), na CMD-line lub w skrypcie, jest wtedy, gdy nie ma żadnych znaków oprócz '\ n 'znak po nim. Nie przesłałem ci odpowiedzi, ale nie sądzę, że to prawda. Powodzenia wszystkim. – shellter

3

Usuń „*” od lokalizacja źródła, rsync wie szukać we wnętrzu katalogu jeśli podasz „/” w końcu

tak:

rsync --verbose --progress --stats --compress --rsh=ssh --recursive --times --perms --links --delete --exclude "*bak" --exclude "*~" /repository/ $DEV_SERVER:$REMOTE_DIR 
Powiązane problemy