unix - ماهو - winscp




sftp خط واحد من المحطة (2)

sftp يدعم الملفات الدفعية.

من صفحة الرجل:

-b batchfile

Batch mode reads a series of commands from an input batchfile instead of stdin.  
Since it lacks user interaction it should be used in conjunction with non-interactive
authentication.  A batchfile of `-' may be used to indicate standard input.  sftp 
will abort if any of the following commands fail: get, put, rename, ln, rm, mkdir, 
chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink, and lmkdir.  Termination 
on error can be suppressed on a command by command basis by prefixing the command 
with a `-' character (for example, -rm /tmp/blah*).

عدة مرات على مدار اليوم ، قد أجري اختبارًا حيث أحتاج إلى البحث عن ملف سجل على خادم بعيد. لقد اعتدت على استخدام جهاز طرفي للوصول إلى الخادم البعيد وسحب ملف السجل المطلوب إلى /tmp على جهازي المحلي.

كنت أبحث عن الخيارات اليوم باستخدام man sftp في محاولة لمعرفة طريقة لتشغيل الأوامر التالية بشكل أساسي في سطر واحد حتى لا أضطر إلى كتابة أمر ، اضغط على enter ، اكتب command press enter ، إلخ. .

(ماذا أفعل الآن)

sftp [email protected]
--mypassword at prompt
lcd /tmp
get /dir/dir/dir/dir/file
quit

لقد وجدت أثناء النظر من خلال man sftp إشارة إلى scp التي لم أستخدمها من قبل. أشعر أنه قد يكون ما أبحث عنه ، لكنني لم أر طريقة لتحديد المكان الذي أردت أن ينتقل فيه الملف المنسوخ بشكل آمن.

هل يمكن لشخص ما أن يوفر لي طريقة للحصول على /dir/file من خادم بعيد وتنزيله على /tmp/file_plus-my-description ؟

كنت آمل أن أتمكن من تشغيل أمر sftp أو scp مماثل لنسخة UNIX عادية مثل:

scp [email protected] /dir/file /tmp/file_plus-my-description

أنا أستخدم الجهاز المدمج في نظام التشغيل Mac OS X 10.8. شكر.


لتنزيل ملف واحد ، ستحتاج إلى إنشاء برنامج نصي للباش. شيء مثل التالي يجب أن يعمل على OS X إذا كان لديك sshpass مثبت.

الاستعمال:

sftpx <password> <[email protected]> <localfile> <remotefile>

ضع هذا البرنامج النصي في مكان ما في طريقك sftpx :

#!/bin/bash

export RND=`cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c 32`
export TMPDIR=/tmp/$RND
export FILENAME=$(basename "$4")
export DSTDIR=$(dirname "$4")

mkdir $TMPDIR
cp "$3" $TMPDIR/$FILENAME

export SSHPASS=$1
sshpass -e sftp -oBatchMode=no -b - $2 << !
   lcd $TMPDIR
   cd $DSTDIR
   put $FILENAME
   bye
!

rm $TMPDIR/$FILENAME
rmdir $TMPDIR






scp