स्कैप का उपयोग करके फ़ोल्डर में नवीनतम फ़ाइल कैसे डाउनलोड करें?


10

मैं अपनी स्थानीय निर्देशिका में एक निश्चित निर्देशिका में नवीनतम (नवीनतम) फ़ाइल डाउनलोड करने के लिए एक scp हस्तांतरण चलाना चाहता हूँ।

कुछ इस तरह:

  • स्रोत :root@rimmer.sk:/home/rimmer/backups/
  • गंतव्य :/home/rimmer/backups/

केवल नवीनतम फ़ाइल प्राप्त करते समय, उनमें से सभी, में नहीं backups

जवाबों:


12

मान लीजिए कि आपके पास चर serverऔर dirपरिभाषित हैं, तो आप कर सकते हैं

$ dir="~"
$ server="user@server.com"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .

जहां आप पहली बार सबसे नई फ़ाइल की तलाश करते हैं, और फिर उसे कॉपी करते हैं।

नोट: मैंने इसे मूर्खता की जाँच नहीं की (उदाहरण के लिए, नवीनतम प्रविष्टि एक फ़ोल्डर है)


अगर यह एक ऐसी निर्देशिका है जो कुछ भी नहीं बनायेगी। आपको उपयोग करने की आवश्यकता है scp -r
स्लम

@ एसएलएम सही है, लेकिन वह उस की नकल नहीं करना चाहेगा।
बर्नहार्ड

यदि scpबाधित हो जाता है तो इसे शुरू से ही कॉपी rsyncको फिर से शुरू करना होगा, जहां से इसे छोड़ा गया था वहां से फिर से शुरू कर सकते हैं।
स्लम

बैश के लिए, मुझे तर्क में डबल कोट्स के साथ सिंगल कोट्स को बदलने की आवश्यकता थी ssh
जोहान्स बिटनर

1
आप निम्न करके पहले $ dir को हटा सकते हैं ( /*दूसरे $ dir के अंत में जोड़ा गया ):scp $server:$(ssh $server 'ls -t $dir/* | head -1') .
जेसी

1

scpइस अर्थ में गूंगा है कि यह केवल स्रोत से गंतव्य तक फ़ाइलों को नेत्रहीन रूप से कॉपी करता है। यदि आप कुछ ऐसा चाहते हैं जो फ़ाइलों की प्रतिलिपि बनाने के बारे में अधिक बुद्धिमान है, तो आपको एक उपकरण का उपयोग करने की आवश्यकता होगी जैसे कि rsync

$ rsync -avz root@rimmer.sk:'$(find /home/rimmer/backups/ -ctime -1)' /home/rimmer/backups/

यह केवल उन फ़ाइलों को कॉपी करेगा जो गायब हैं या rimmer.sk के बैकअप निर्देशिका से अंतिम दिन (-ctime -1) में आपके स्थानीय बैकअप की निर्देशिका में बदल गई हैं।

-ctime n
   File's  status  was last changed n*24 hours ago.  See the comments for 
   -atime to understand how rounding affects the interpretation of file 
   status change times.

संदर्भ


Rsync के साथ समस्या समान है। यदि मैं 2 दिनों के लिए ऑफ़लाइन हूं, तो यह सभी दिनों से सभी बैकअप की प्रतिलिपि बनाने की कोशिश करता है, जिसकी मुझे बिल्कुल आवश्यकता नहीं है और यह बहुत बड़ा है।
रिचर्ड रॉड्रिग्ज

@RichardRodriguez - ठीक है, कृपया अपने प्रश्न को अपडेट करें और आप के बाद और अधिक विशिष्ट बनें।
स्लम

2
@ एसएलएम: मुझे लगता है कि यह सब ठीक है। मैं केवल एक निर्देशिका में नवीनतम फ़ाइल डाउनलोड करना चाहता हूं। मैं इसके बारे में और क्या समझा सकता हूं? :)
रिचर्ड रोड्रिग्ज

@RichardRodriguez - इस निर्देशिका में कौन सी फाइलें हैं? नमूना सूचीकरण सहायक होगा।
स्लम

1
क्यों गिरा वोट?
स्लम

0

पार्टी के लिए थोड़ा देर से लेकिन शायद ssh और rsync के साथ एक समाधान कुछ के लिए काम करेगा:

source_host="yourhost.com"
source_dir="/a/dir/on/yourhost.com/"
target_dir="/the/dir/where/last_backup/will/be/placed"
last_backup=$(ssh user@${source_host} "ls -t ${source_dir} | head -1")
if [ "${last_backup}" == "" ]; then
    echo "ERROR: didn't find a backup, cannot continue!"
else
    echo "the last backup is: ${last_backup}"
    rsync -avzh user@${source_host}:${source_dir}/${last_backup} ${target_dir}
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.