কোনও স্ক্রিপ ব্যবহার করে কোনও ফোল্ডারে সর্বশেষ ফাইলটি কীভাবে ডাউনলোড করবেন?


10

আমি আমার স্থানীয় ডিরেক্টরিতে একটি নির্দিষ্ট ডিরেক্টরিতে সর্বশেষ (সর্বশেষ) ফাইলটি ডাউনলোড করতে একটি স্কিপি স্থানান্তর চালাতে চাই।

এটার মতো কিছু:

  • উত্স :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
slm

@ এসএলএম সঠিক, তবে তিনি এটি অনুলিপি করতে চাইবেন না।
বার্নহার্ড

যদি scpব্যাহত হয় তবে এটি অনুলিপিটি rsyncশুরু থেকে পুনরায় চালু করতে হবে , এটি যেখান থেকে ছেড়েছিল সেখান থেকে আবার শুরু করতে পারে।
slm

বাশের জন্য, আমার পক্ষে যুক্তিতে ডাবল উদ্ধৃতি সহ একক উদ্ধৃতিগুলি প্রতিস্থাপন করা দরকার ssh
জোহানেস বিট্টনার

1
আপনি নিম্নলিখিতটি দ্বারা প্রথম $ দির সরিয়ে ফেলতে পারেন ( /*দ্বিতীয় $ দিরের শেষে একটি যুক্ত করা হয়েছে):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/

এটি কেবলমাত্র সেই ফাইলগুলি অনুলিপি করবে যা গত দিনের রিমার.স্কের ব্যাকআপ ডিরেক্টরি থেকে (স্থানীয় সময় -১) আপনার স্থানীয় ব্যাকআপের ডিরেক্টরিতে পরিবর্তিত হয়েছে।

-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.

তথ্যসূত্র


আরএসইএনসি-র সমস্যা একই রকম। যদি আমি ২ দিনের জন্য অফলাইনে থাকি তবে এটি সমস্ত দিন থেকে সমস্ত ব্যাকআপ অনুলিপি করার চেষ্টা করে, যা আমার মোটেই প্রয়োজন হয় না এবং এটি বিশাল।
রিচার্ড রদ্রিগেজ

@ রিচার্ডরড্রিগেজ - ঠিক আছে আপনার প্রশ্নটি আপডেট করুন এবং আপনার পরে কী হবে তা আরও সুনির্দিষ্ট করুন।
slm

2
@ এসএলএম: আমি মনে করি প্রশ্নটি ঠিক যেমন আছে ঠিক তেমন। আমি কেবল একটি ডিরেক্টরিতে সর্বশেষ ফাইলটি ডাউনলোড করতে চাই। এ সম্পর্কে আমি আর কী ব্যাখ্যা করতে পারি? :)
রিচার্ড রদ্রিগেজ

@ রিচার্ডরোডরিগেজ - এই ডিরেক্টরিতে কোন ফাইল রয়েছে? একটি নমুনা তালিকা সহায়ক হবে।
slm

1
কেন ডাউন ভোট?
slm

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.