Sftp ব্যবহার করে কীভাবে একাধিক ফাইল সরানো যায়


13

এই পোস্টটি রিমোট সার্ভার থেকে muliple ফাইল অপসারণ সম্পর্কে হয়, যখন sftp পাসওয়ার্ড কম সংযোগ স্থাপন করা হয়। আমার নীচের মত কোড আছে। ভেরিয়েবলের কেবলমাত্র প্রথম ফাইল $file_listমুছে ফেলা হবে, যখন আমার কাছে ভেরিয়েবলটি সেট হবে,

$file_list="file1 file2"

sftp $USER@$HOST
rm $file_list
quit
SFTP-Session

এমনকি কমান্ডগুলি প্রম্পট মোডে কার্যকর করার চেষ্টা করেছি।

sftp $USER@$HOST
rm file1 file2

তবে, আমি এখনও দেখতে পাচ্ছি যে কেবল ফাইল 1 মুছে ফেলা হচ্ছে।

আমি কোনও বেসিক কমান্ড অনুপস্থিত কিনা তা নিশ্চিত নই। আমি চেষ্টা করেছি mdelete/ mdel/ mrm, যা sftp প্রম্পট উইন্ডোতে অবৈধ কমান্ড হিসাবে প্রত্যাখ্যাত হয়েছিল ।

উত্তর:


8

এখানে একটি সম্ভাব্য সমাধান যা বাশ স্ক্রিপ্টে যুক্ত করা যেতে পারে। এটি আদর্শ নয় কারণ এটি প্রতিটি ফাইলের জন্য একটি নতুন সংযোগ তৈরি করবে।

#!/bin/bash
# set variables
USER="username"
HOST="hostname"
file_list="file1 file1 file3 file4"
# delete each file
for file in $file_list; do
    echo "rm $file" | sftp $USER@$HOST
done
exit 0

এই ওয়ান-লাইনারটি আরও ভাল! ফাইল1-9 হ'ল ফাইলের নাম সরিয়ে ফেলা, যদি আপনি চান তবে একটি ভেরিয়েবল ব্যবহার করুন, এটি একই জিনিস।

for file in file1 file2 file3 file4 file5 file6 file7 file8 file9; do echo -e "rm $file" >> sftp_batch; done; sftp -b sftp_batch username@hostname; rm sftp_batch

যদি ফাইলগুলির নামে সাদা স্পেস থাকে? এই সমাধান কাজ করবে?
কোডফোরস্টার

আপনি ফাইলের নাম উদ্ধৃত করতে পারেন। আপনার যদি তাদের অনেকগুলি থাকে তবে আমি আপনাকে সেরা ফলাফল পেতে বাশ প্যারামিটার বিস্তারের দিকে নজর দেওয়ার পরামর্শ দিই। সাধারনত সরলতার জন্য কোনও প্রশাসক শ্বেতস্থান এবং সম্পর্কিত অক্ষর সহ ফাইলের নামগুলিতে অনুমতি দেবে না।
এমবিআইবার

1

আপনি rmকমান্ডটিতে একটি তালিকা দিতে পারবেন না sftp, ম্যান পৃষ্ঠায় লিখিতভাবে কেবল একটি পথ নেন:

rm path
    Delete remote file specified by path.

1

আমি সাধারণত এটি করতে ব্যবহার lftpকরি।

রাইমোট সার্ভার স্কিনারের উপর সেটআপ করুন
$ mkdir adir
$ touch afile1 afile2
$ ls
afile1  afile2
এখন আমরা মুছুন
$ file_list="afile1 afile2"
$ lftp sftp://sam@skinner -e "cd ~/adir; mrm $file_list"
cd ok, cwd=/home/sam/adir    
rm ok, 2 files removed                 
lftp sam@skinner:~/adir> ls
drwxr-xr-x    2 sam      users        4096 Nov  4 11:52 .
drwxr-x---  131 sam      users       20480 Nov  4 11:51 ..
lftp sam@skinner:~/adir> bye

এটি একটি একক আদেশ করতে:

$ lftp sftp://sam@skinner -e "cd ~/adir; mrm $file_list; bye"

আমি lftp কমান্ড কার্যকর করতে পারছি না, এটিতে কিছু লাইব্রেরি ফাইলের প্রয়োজন হতে পারে।
ভাওয়ানা

@ ভবনা - এটি ইনস্টল নাও হতে পারে।
slm

1

আপনি যদি sftp করতে পারেন, আপনি কি ssh চালাতে পারবেন না? যদি তাই হয় তবে একটি আদেশ যেমন:

 ssh user@hostname rm file1 file2 

ভাল কাজ করা উচিত। আপনি যদি সরকারী / বেসরকারী এসএসএইচ কীগুলি ব্যবহার করেন তবে কোনও পাসওয়ার্ড প্রম্পট থাকবে না।


হ্যাঁ এটি কাজ করেছে, তবে উপরের কমান্ডটি কোনও লগের তথ্য তৈরি করে না, এবং প্রয়োজনীয়তাটি লগও তৈরি করা প্রয়োজন (যদিও আমি এটি প্রশ্নের মধ্যে নির্দিষ্ট করে নি)। ধন্যবাদ
ভাওয়ানা

1

যদি সেগুলি ফাইলের নাম হয়। আপনি এর সাথে একটি গ্লোব প্যাটার্ন ব্যবহার করে এগুলি মুছতে পারেন

rm file*

ঠিক আছে, এটা নিশ্চিত যে আমি ছিল না।
কুসালানন্দ

আমি এই পদ্ধতিটি চেষ্টা করেছি এবং আপনি যদি আপনার দূরবর্তী সার্ভারটি অ্যাক্সেস করতে এসএফটিপি ব্যবহার করেন তবে এটি কাজ করে works
মিঃমৌরিসিওলাইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.