שאלה ניתן עותק ספריות להעתיק רקורסיבית?


כרגע אני יכול להעתיק רק אחד .tar קובץ. אבל איך אני יכול להעתיק ספריות רקורסיבית עם scp?


520
2018-04-29 04:24






תשובות:


כן, להשתמש -rYou

scp -rp sourcedirectory user@dest:/path
  • -R פירושו רקורסיבי
  • -P משמרת זמני שינוי, זמני גישה ומצבים מקובץ המקור.

הערה: פעולה זו יוצרת את sourcedirectory בפנים /path ולכן הקבצים יהיו /path/sourcedirectory


841
2018-04-29 04:28



עם זאת יש לזכור כי זה לא ישמור symlinks. - CpnCrunch
שים לב ש -pr (אופציות בסדר הפוך) לא להעתיק את התיקיות, במקום התוכן שלהם לספרייה היעד (ככל הנראה, את סדר האפשרויות משנה). - pms
מסיבה כלשהי /path נראה יחסית ל users $HOME - איך אני עושה את זה מוחלט בלי להיות root@? - Jonathan
כן, SCP כמו שמעולם לא מכניס את הקבצים איפה שאני רוצה. לעתים קרובות כאשר מנסים להחליף ספרייה, אני איכשהו בסופו של דבר עם ספרייה אחרת בתוך אותו עם שם זהה במקום. אני זהיר במיוחד עם זה. - sudo


למרות שהתשובות הקודמות הן נכונות מבחינה טכנית, כדאי גם לשקול שימוש rsync במקום זאת. rsync משווה את הנתונים על הצדדים שנשלחו ומקבלים עם מנגנון הבדל, כך שלא יהיה צורך לשלוח שוב נתונים שכבר נשלחו בעבר.

אם אתה הולך להעתיק משהו למחשב מרוחק יותר מפעם אחת, השתמש rsync. למעשה, זה טוב לשימוש rsync בכל פעם כי יש יותר בקרות על דברים כמו העתקת הרשאות קבצים ובעלות ולא לכלול קבצים מסוימים או ספריות. בכללי:

$ rsync -av /local/dir/ server:/remote/dir/

יסנכרן ספריה מקומית עם ספריה מרוחקת. אם אתה מפעיל את זה בפעם השנייה את התוכן של הספרייה המקומית לא השתנו, אין נתונים יועברו - הרבה יותר יעיל מאשר ריצה scp ואת העתקת הכל בכל פעם.

כמו כן, rsync מאפשר לך להתאושש העברות נקטע בקלות רבה, בניגוד scp.

לבסוף, גרסאות מודרניות של rsync כברירת מחדל להפעיל את ssh, אז אם scp כבר עובד, rsync צריך די הרבה להיות החלפת תחליף.


149
2018-04-29 05:11



"אין נתונים יועברו" אלא, כמובן, את הנתונים הנדרשים כדי לקבוע בדיוק מה יש או לא השתנה. - thsutton
אה כן הבנתי את זה קצת מעל ברור. אנחנו לא מדברים כאן על הסתבכות קוונטית. - Phil Hollenback
זה כל כך עצוב כי osx, win7 ואפילו אובונטו אפילו משתמש משהו כמו rsync עבור GUI שלהם עדיין. - cregox
דמורטי עניתי לשאלתו. אמרתי לו דרך טובה יותר לעשות זאת. - Phil Hollenback
@raphnguyen: לא, מחיקת קבצים מהספרייה המקומית לא תמחק אותם מהספריה המרוחקת. ניתן להפעיל את ההתנהגות הזו עם --delete אפשרות. - Phil Hollenback


זה מה -r אופציה עבור. :)

ראה דף האיש לקבלת מידע נוסף אם יש צורך.


30
2018-04-29 04:27





אפשרות העתקה רקורסיבית '-R' (במקרה התחתון)

scp -r

אשר אני לבלבל עם אפשרות להעתיק רקורסיבית מקומית קבועה '-R' (במקרה העליון)

cp -R

9
2017-09-11 17:53



אני רק רוצה להצביע על ההבדל בין cp ו scp כמו -R ו- R אינם זהים. unix.stackexchange.com/questions/18712/... - Tarun


הדרך הטובה ביותר היא להשתמש rsync על SSH

rsync -a -essh /source/ user@dest-server:/dest/

rsync -a -essh user@source-server:/source/ /dest/

האפשרויות המועדפות שלי הן -Pazvessh --delete:

  • -A: מצב ארכיון (כולל הרבה אפשרויות ברירת מחדל נפוצות, כולל שמירה על סימניות)
  • -Z: לדחוס
  • -v verbose: הצג קבצים
  • -P: להראות progess כמו קבצים לעשות / קבצים שנותרו
  • -ssh: לעשות rsync בפרוטוקול SSH
  • --delete: למחוק קבצים היעד כי הם כבר לא במקור

4
2017-11-05 18:33



כל הגירסאות של rsync כי השתמשתי ישתמש ssh כברירת מחדל, כך -essh לא סביר שיהיה צורך בכך. ואת הבחירה של הפקודה המשמש להתחבר המארח מרחוק הוא באמת לא קשור להעתקה רקורסיבית. - kasperd


לאחר מחפש את הדגל עותק רקורסיבי, בהצלחה השתמשו בו תודה על ההודעה הזאת, אני רוצה לכתוב רק הצעה.

אם המקרה הוא שאתה מעתיק (רקורסיבית) ספרייה. אולי אם הקבצים נשלח דחוס אתה יכול לחסוך זמן בהעברה

מה שעשיתי בסופו של דבר היה:

local$ tar -czvf local.tar.gz directory/
local$ scp local.tar.gz user@remote:/directory
ssh user@remote
remote$ tar -xzvf local.tar.gz

מקווה שזה עוזר


3
2018-06-06 18:00



סיומת הקובץ צריך להיות גם .tar.gz או .tgz מאז הקובץ הוא ארכיון זפת gzipped (מאז -z הדגל משמש). - anthonybell


ניתן להעתיק רקורסיבית ספריה לארכיון דחוס עם פקודה פשוטה זו:

ssh -p 22 user@address-to-copy-from.com  'cd /parent/directory && tar zcvf - directory_to_copy' > /destination/on/your/machine/archive_name.tgz

לדוגמה, כדי להעתיק תוכן של /var/log מ domain.com ל ~/logs.tgz אתה רץ:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' > ~/logs.tgz

ניתן גם לחלץ קבצים על מערכת היעד באמצעות צינורות. פקודה זו תעתיק תוכן של /var/log ב domain.com ל ~/destination/log במערכת שלך:

ssh -p 22 user@domain.com  'cd /var && tar zcvf - log' | tar xzf - -C ~/destination

אמנם כדי לשקף ספריה, אתה כנראה צריך להשתמש rsync...


1
2018-01-06 07:20





אם אתה מעדיף להעביר את סיסמת המשתמש כפרמטר במקום להזין אותו באופן אינטראקטיבי, תוכל להשתמש בו sshpass(sudo apt-get install -y sshpass).

דוגמא:

sshpass -p 'remote_password' scp -rp /src/folder myremoteusername@122.10.12.123:/dest/folder

0
2018-01-06 06:49





אפשרות נוספת (סביר יותר לשימוש חוזר) היא להשתמש ב- NFS - לבדוק את nfs-kernel-server וכיצד להגדיר את מניות NFS.


-2
2017-08-11 22:08



זה שטויות גמורות. ישנם מקרים אינסופיים שבהם תשתמש scp אבל NFS אינו אופציה. - Sven♦