sftp - ماهو - winscp شرح




SCP أو sftp نسخ ملفات متعددة مع أمر واحد (10)

أريد نسخ الملفات من / إلى الخادم البعيد في دلائل مختلفة. على سبيل المثال ، أريد تشغيل هذه الأوامر الأربعة مرة واحدة.

scp remote:A/1.txt local:A/1.txt
scp remote:A/2.txt local:A/2.txt
scp remote:B/1.txt local:B/1.txt
scp remote:C/1.txt local:C/1.txt

ما هي الطريقة الاسهل لفعل ذلك؟


أبسط طريقة هي

local$ scp remote:{A/1,A/2,B/3,C/4}.txt ./

لذلك يمكن أن تتضمن القائمة {..} دلائل (A ، B و C هنا هي أدلة ؛ "1.txt" و "2.txt" هي أسماء ملفات في هذه الدلائل).

على الرغم من أنها ستنسخ كل هذه الملفات الأربعة إلى دليل محلي واحد - لست متأكدًا مما إذا كنت تريد ذلك.

في الحالة المذكورة أعلاه ، ستنتهي الملفات البعيدة A / 1.txt و A / 2.txt و B / 3.txt و C / 4.txt المنسوخة إلى دليل محلي واحد ، مع أسماء الملفات. ./2.txt و ./3.txt و ./4.txt


الأمر الخاص بك يعمل بشكل مثالي ولكن ، أنا أيضا تريد تغيير اسم الملف أثناء إرسال المحلية إلى البعيد. كتبت أمرًا: - sshpass -p password scp /path/to/file.txt root @ hostname: /path/newfile.txt

لكنه يعطي خطأ أن / path/newfile.txt: لا يوجد مثل هذا الملف أو دليل العثور على الرجاء مساعدتي في هذه الحالة


في حالتي ، أنا مقتصر على استخدام الأمر sftp فقط.
لذلك ، كان علي استخدام batchfile مع sftp. أنا خلقت برنامج نصي مثل ما يلي. هذا يفترض أنك تعمل في / tmp directory ، وتريد وضع الملفات في destdir_on_remote_system على النظام البعيد. هذا أيضا يعمل فقط مع تسجيل دخول غير تفاعلي. تحتاج إلى إعداد مفاتيح عامة / خاصة حتى تتمكن من تسجيل الدخول دون إدخال كلمة مرور. التغيير حسب الحاجة.

#!/bin/bash

cd /tmp
# start script with list of files to transfer
ls -1 fileset1* > batchfile1
ls -1 fileset2* >> batchfile1

sed -i -e 's/^/put /' batchfile1
echo "cd destdir_on_remote_system" > batchfile
cat batchfile1 >> batchfile
rm batchfile1

sftp -b batchfile [email protected]

كما ذكر Jiri ، يمكنك استخدام scp -r [email protected]:/some/remote/path /some/local/path لنسخ الملفات بشكل متكرر. هذا يفترض أن هناك دليل واحد يحتوي على جميع الملفات التي تريد نقلها (ولا شيء آخر).

ومع ذلك ، توفر SFTP بديلاً إذا كنت تريد نقل الملفات من دلائل مختلفة متعددة ، والوجهات غير متطابقة:

sftp [email protected] << EOF
  get /some/remote/path1/file1 /some/local/path1/file1
  get /some/remote/path2/file2 /some/local/path2/file2
  get /some/remote/path3/file3 /some/local/path3/file3
EOF

يستخدم هذا بناء جملة "here doc" لتحديد تسلسل أوامر الإدخال SFTP. كبديل ، يمكنك وضع أوامر SFTP في ملف نصي وتنفيذ sftp [email protected] -b batchFile.txt


ملاحظة: أعتذر مقدمًا عن الإجابة على جزء فقط من السؤال أعلاه. ومع ذلك ، وجدت أن هذه الأوامر مفيدة لاحتياجات يونيكس الحالية.

تحميل ملفات معينة من جهاز محلي إلى جهاز بعيد:

~/Desktop/dump_files$ scp file1.txt file2.txt lab1.cpp etc.ext [email protected]:Folder1/DestinationFolderForFiles/

تحميل دليل كامل من جهاز محلي إلى جهاز بعيد:

~$ scp -r Desktop/dump_files [email protected]:Folder1/DestinationFolderForFiles/

تنزيل دليل كامل من جهاز بعيد إلى جهاز محلي:

~/Desktop$ scp -r [email protected]:Public/web/ Desktop/


من المحلية إلى الخادم:

scp file1.txt file2.sh [email protected]:~/pathtoupload

من الخادم إلى المحلي:

scp [email protected]:"file1.log file2.log" "~/yourpathtocopy"


نسخ ملفات متعددة من بعيد إلى محلي:

$ scp [email protected]:/some/remote/directory/\{a,b,c\} ./

نسخ ملفات متعددة من المحلية إلى البعيدة:

$ scp foo.txt bar.txt [email protected]:~
$ scp {foo,bar}.txt [email protected]:~
$ scp *.txt [email protected]:~

انسخ ملفات متعددة من بعيد إلى بعيد:

$ scp [email protected]:/some/remote/directory/foobar.txt \
[email protected]:/some/remote/directory/

المصدر: http://www.hypexr.org/linux_scp_help.php


يستخدم scp ssh لنقل البيانات باستخدام نفس المصادقة ويوفر نفس الأمان مثل ssh.

من أفضل الممارسات هنا تطبيق "مفاتيح SSH و REGION DIRECTION". مع هذا ، يمكنك كتابة البرامج النصية الخاصة بك دون القلق بشأن المصادقة. سهل هكذا.

انظر ما هو SSH-KEYGEN


المشكلة : نسخ أدلة متعددة من خادم بعيد إلى الجهاز المحلي باستخدام أمر SCP واحد والاحتفاظ بكل دليل كما هو في الخادم البعيد.

الحل : يمكن لـ SCP القيام بذلك بسهولة. هذا يحل مشكلة مزعج إدخال كلمة المرور عدة مرات عند استخدام SCP مع عدة مجلدات.

على سبيل المثال

# copies folders t1, t2, t3 from `test` to your local working directory
# note that there shouldn't be any space in between the folder names;
# we also escape the braces.
# please note the dot at the end of the SCP command

~$ cd ~/working/directory
~$ scp -r [email protected]:/work/datasets/images/test/\{t1,t2,t3\}  .

PS: الدافع من قبل هذه الإجابة الرائعة: SCP أو SFTP نسخ ملفات متعددة مع أمر واحد


scp remote:"[A-C]/[12].txt" local: