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

यह एक-लाइनर कहीं बेहतर है! file1-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

क्या होगा अगर फाइलों में उनके नाम के सफेद स्थान हैं? क्या यह समाधान काम करेगा?
कोडफोर्स

आप फ़ाइल नामों को उद्धृत कर सकते हैं। यदि आपके पास उनमें से कई हैं, तो मेरा सुझाव है कि आप सर्वोत्तम परिणाम प्राप्त करने के लिए बैश पैरामीटर विस्तार में देखें। आमतौर पर सादगी के लिए एक व्यवस्थापक व्हाट्सएप और संबंधित पात्रों के साथ फ़ाइल नाम की अनुमति नहीं देगा।
mbiber

1

आप rmकमांड को एक सूची नहीं दे सकते हैं sftp, केवल एक ही रास्ता लेता है जैसा कि मैन पेज में लिखा गया है:

rm path
    Delete remote file specified by path.

1

मैं आमतौर lftpपर ऐसा करने के लिए उपयोग करता हूं।

सेटअप - rmeote सर्वर स्किनर पर
$ 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 

ठीक काम करना चाहिए। यदि आप सार्वजनिक / निजी SSH कुंजियों का उपयोग करते हैं तो कोई पासवर्ड प्रॉम्प्ट नहीं होगा।


हाँ, यह काम किया है, लेकिन उपरोक्त कमांड कोई लॉग जानकारी नहीं बनाता है, और आवश्यकता लॉग बनाने के लिए भी है (हालांकि मैंने इसे प्रश्न में निर्दिष्ट नहीं किया है)। धन्यवाद
भावना

1

यदि वे फ़ाइल नाम हैं। आप एक ग्लोब पैटर्न का उपयोग करके उन्हें हटा सकते हैं

rm file*

खैर, यह मुझे यकीन नहीं था।
Kusalananda

मैंने इस विधि की कोशिश की है और यह काम करता है यदि आप अपने दूरस्थ सर्वर तक पहुंचने के लिए SFTP का उपयोग कर रहे हैं।
MrMauricioLeite
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.