2012-05-23 23 views
11

Tôi đang cố gắng viết một tập lệnh bash đơn giản cho máy cục bộ (Mac OS X) của tôi để di chuyển tệp từ thư mục trên máy của tôi đến một máy từ xa. Dòng này là không:Bash scripting rsync: rsync: link_stat (blah) không thành công: Không có tệp hoặc thư mục nào (2)

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

$DEV_SERVER$REMOTE_DIR được định nghĩa trước đây, và tôi vang họ để xác minh họ là chính xác.

Các lỗi tôi nhận được là:

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

Để lưu ý ở đây là thay vì sử dụng các thư mục được xác định (/repository, đó là trong thư mục gốc của máy), nó sử dụng thư mục làm việc của tôi. Điều gì gây ra điều này?

+2

Trích biến của bạn, xin vui lòng! –

Trả lời

23

Kiểm tra xem \ nhân vật của bạn không có khoảng trắng sau đó vào cuối dòng, bởi vì điều này sẽ gây BASH không giải thích bọc đường một cách chính xác, đưa ra các lỗi rsync trên

+2

Bạn .... bạn vừa kết thúc 2 tiếng kéo tóc. Anh yêu em. –

-2

này:

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

phải được điều này:

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

Bash giải thích nhân vật \ khác biệt so với các dòng lệnh, hoặc có lẽ là một nhân vật phi khoảng trắng tiềm ẩn sau nó.

+0

Bash xử lý nó khác nhau như thế nào trong các phiên không tương tác? – jordanm

+0

Phù hợp hơn với superuser.com –

+3

Vấn đề duy nhất tôi gặp phải khi sử dụng dòng-continuation-char (tức là '\'), trên cmd-line OR trong một tập lệnh, là khi có bất kỳ ký tự nào ngoài '\ n 'ký tự sau nó. Tôi không downvote câu trả lời của bạn, nhưng tôi không nghĩ rằng nó đúng. Chúc mọi người may mắn. – shellter

3

Tháo '*' từ vị trí nguồn, rsync biết để nhìn vào bên trong thư mục nếu bạn chỉ định '/' vào cuối

như thế:

rsync --verbose --progress --stats --compress --rsh=ssh --recursive --times --perms --links --delete --exclude "*bak" --exclude "*~" /repository/ $DEV_SERVER:$REMOTE_DIR 
Các vấn đề liên quan