বড় ডিরেক্টরি ব্যবহার করে সরানোর সময় mv
, অগ্রগতি (%) দেখার কোনও উপায় আছে কি? cp
জেন্টু কমান্ড একটি ছিল -g
সুইচ উন্নতি দেখিয়েছেন যে।
বড় ডিরেক্টরি ব্যবহার করে সরানোর সময় mv
, অগ্রগতি (%) দেখার কোনও উপায় আছে কি? cp
জেন্টু কমান্ড একটি ছিল -g
সুইচ উন্নতি দেখিয়েছেন যে।
উত্তর:
আপনি একটি প্যাচড সিপি এবং এমভি তৈরি করতে পারেন যা উভয়ই অগ্রগতি দেখানোর জন্য -g সুইচ সমর্থন করে। এই পৃষ্ঠায় নির্দেশাবলী এবং প্যাচ আছে । তবে : পৃষ্ঠাটি আপনাকে নির্দেশ দেয়
$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv
যা মূল সিপি এবং এমভি ওভাররাইট করে। এর দুটি অসুবিধাগুলি রয়েছে: প্রথমত, কোনও আপডেটড কোর্টিল প্যাকেজ যদি আপনার সিস্টেমে আসে তবে সেগুলি ওভাররাইট করা হয়। দ্বিতীয়ত, প্যাচযুক্ত সংস্করণে যদি সমস্যা হয় তবে তারা স্ট্যান্ডার্ড সিপি এবং এমভিতে নির্ভর স্ক্রিপ্টগুলি ভেঙে দিতে পারে। আমি বরং এরকম কিছু করব:
$ sudo cp src/cp /usr/local/bin/cpg
$ sudo cp src/mv /usr/local/bin/mvg
যা ফাইলগুলি / usr / স্থানীয় / বিনে অনুলিপি করে যা ব্যবহারকারী সংকলিত প্রোগ্রামগুলির উদ্দেশ্যে এবং তাদের একটি পৃথক নাম দেয়। সুতরাং আপনি যখন একটি অগ্রগতি বার চান, আপনি mvg -g bigfile /mnt/backup
সাধারণত বলতে এবং এমভি ব্যবহার করুন।
এছাড়াও আপনি তা করতে পারেন alias mvg="/usr/local/mvg -g"
তবে আপনাকে কেবল বলা mvg bigfile /mnt/backup
এবং সরাসরি অগ্রগতি বারটি নেওয়া দরকার।
যখন সহজ সমাধান রয়েছে তখন কোর্টিল থেকে বাইনারিগুলি ওভাররাইট করার ধারণাটি আমি পছন্দ করি না, তাই এখানে আমার রয়েছে:
rsync : Rsync ফাইলগুলি অনুলিপি করে এবং -P
একটি অগ্রগতি বারের জন্য একটি স্যুইচ থাকে। সুতরাং আপনার যদি আরএসসিএনসি ইনস্টল করা থাকে তবে আপনি আপনার শাঁস ডটফাইলে একটি সাধারণ উপন্যাস ব্যবহার করতে পারেন:
alias cp='rsync -aP'
নেতিবাচক দিকটি হ'ল, আরএসসিএনপি সিপির তুলনায় কিছুটা ধীর গতিযুক্ত, তবে আপনার সময় দিয়ে এটি পরিমাপ করা উচিত এবং আপনার নিজের জন্য সিদ্ধান্ত নেওয়া উচিত, আমি এর সাথে বেঁচে থাকতে পারি :-)
শেল স্ক্রিপ্ট : একটি শেল স্ক্রিপ্ট প্রগতি বার তৈরি করতে পারে। কিছুক্ষণ আগে নেট এ এটি পেয়েছি এবং উত্সটি আমার মনে নেই:
#!/bin/sh
cp_p()
{
strace -q -ewrite cp -- "${1}" "${2}" 2>&1 \
| awk '{
count += $NF
if (count % 10 == 0) {
percent = count / total_size * 100
printf "%3d%% [", percent
for (i=0;i<=percent;i++)
printf "="
printf ">"
for (i=percent;i<100;i++)
printf " "
printf "]\r"
}
}
END { print "" }' total_size=$(stat -c '%s' "${1}") count=0
}
এটি দেখতে এইরকম হবে:
% cp_p /home/echox/foo.dat /home/echox/bar.dat
66% [===============================> ]
বার :
'বার' - এএসসিআইআই অগ্রগতি বার সহ 'বিড়াল'
bar
সমস্ত ধরণের ক্রিয়াকলাপের জন্য একটি প্রসেস বার প্রদর্শন করার জন্য একটি ছোট শেল স্ক্রিপ্ট (সিপি, টার, ইত্যাদি)। আপনি প্রকল্পের হোমপেজে উদাহরণগুলি খুঁজে পেতে পারেন ।
এটি বোর্ন শেলের জন্যও রচিত, তাই এটি সর্বত্রই চলবে।
bar
mv
এখনও জড়ান না।
rsync
প্রতিস্থাপন করে না mv
(ওপি সম্পর্কে জিজ্ঞাসা করছে) পুরোপুরি, বিশেষত যখন অনুলিপি অনুলিপি ফাইল সিস্টেমে দ্রুত অনুলিপি আসে btrfs
।
একটি নতুন সরঞ্জাম বলা হয়েছে progress
যা একটি চলমান কমান্ড সম্পর্কিত যে কোনও বর্ণনাকারী খুঁজে পেতে পারে এবং অগ্রগতি এবং গতি প্রদর্শন করতে পারে:
এখানে উপলভ্য
progress -w
সমস্ত চলমান সিপি, এমভি ইত্যাদি ক্রিয়াকলাপের পরিসংখ্যানগুলি আউটপুট করে
progress
ইনস্টল করার পরে কেবল টাইপ করেছি এবং এটি mv
বর্তমানে যে কমান্ডটির জন্য অপেক্ষা করছিলাম তার জন্য অগ্রগতি উপস্থাপন করেছে। ধন্যবাদ!
sudo
(আমার ধারণা একই ব্যবহারকারী) - আপনি watch
প্রতি 2 সেকেন্ডে কী ঘটছে তা বলতেও পারেন :watch progress -w
watch progress -w
আপনি সহজেই ব্যবহার করতে পারেনprogress -m
অগ্রগতি বারটি দেখানোর জন্য আপনি পাইপ দর্শকের কমান্ডটি ব্যবহার করতে পারেন pv
:
pv /original/file > /new/file
আমি প্রায়শই এটি একটি মাউন্ট করা নেটওয়ার্ক ফাইল সিস্টেমের ( gzip
এবং এর সাথে একত্রিত tar
) একটি বড় ফাইল অনুলিপি করতে ব্যবহার করি । অপূর্ণতা হ'ল আপনি কেবল একটি ফাইল অনুলিপি করতে পারেন ডিরেক্টরিকে নয়। এবং আপনাকে অবশ্যই নতুন ফাইলটির একটি নাম দিতে হবে, আপনি কেবল গন্তব্য ডিরেক্টরিটি দিতে পারেন cp
না। তবে অনুলিপি করা pv
উদ্দেশ্য নয়। এটি একটি শক্তিশালী সরঞ্জাম এবং কেবল অনুলিপি ফাইলের চেয়ে অনেক বেশি কাজ করে। আরও উদাহরণের জন্য হোমপেজটি দেখুন pv
।
আরও ভাল বিকল্প ব্যবহার করা হয় rsync -aP
। mv
পরিবর্তে আপনি চাইলে পতাকাটি যুক্ত করুন --remove-source-files
। আপনার এই যোগ .bashrc
আপনি প্রায়শই কমান্ড ব্যবহার করতে চাইলে:
alias rscp='rsync -aP'
alias rsmv='rsync -aP --remove-source-files'
এখানে ডাউনসাইডটি হল rsync কেবল অগ্রগতি দেখায়, অগ্রগতির বার নয়।
tar cf - source-dir | pv | tar xf - -C out-dir
আপনাকে একটি সম্পূর্ণ ডিরেক্টরিের থ্রুপুট দেবে। আপনি যদি আকারটি জানেন এবং -s
পিভিতে পাস করেন তবে এটি আপনাকে অগ্রগতিও দিতে পারে।
আপনার লক্ষ্য যদি অগ্রগতি বারের সাথে একটি ডিরেক্টরি সরানো / অনুলিপি করা হয় তবে নন-টার্মিনাল জিইউআই, এমসি (মিডনাইট কমান্ডার) এড়ানো ভাল পছন্দ।
আমার সমাধানটি ব্যবহার করা rsync
। এটি ডিরেক্টরিগুলি অনুলিপি করতে পারে, সফল কপির পরে উত্স ফাইলগুলি মুছে ফেলতে পারে (এভাবে "এগুলি" সরানো ") এবং অন্যান্য বৈশিষ্ট্যগুলির মধ্যে অগ্রগতি প্রতিবেদন প্রদর্শন করতে পারে (উল্লেখযোগ্যভাবে আংশিক অনুলিপি করা ডিরেক্টরিগুলি সিঙ্ক করে এবং নেটওয়ার্কের উপর কাজ করা working)
প্রগতি প্রতিবেদন সহ আমি কীভাবে একটি ডিরেক্টরিকে আরএসআইএনসি দিয়ে স্থানান্তর করব তা এখানে:
rsync -aP --remove-source-files $src $dst && rm -r $src
নিশ্চিত করুন $src
নেই না একটি ব্যাকস্ল্যাশ শেষ, অন্যথায় আপনি গনুহ যে এর চেয়ে একটি ভিন্ন অর্থ পাবেন cp
।
rm -r
শেষে প্রয়োজনীয় কারণ --remove-source-files
শুধুমাত্র সোর্স ফাইল সরিয়ে ফেলা পর প্রতিটি এক সফলভাবে ডিরেক্টরি উপর অনুলিপি করা হয়েছে, না। &&
শুধুমাত্র এটি চালানোর জন্য যদি rsync সফলভাবে সমাপ্ত নিশ্চিত করে তোলে। আপনি যদি ভৌতিক হয়ে থাকেন তবে আপনি এটিকে কোনও ধরণের পুনরাবৃত্তির সাথে প্রতিস্থাপন করতে পারেন rmdir
, যেমনfind $src -d -exec rmdir {} +
একমাত্র ত্রুটিটি হ'ল -P
বিকল্পটি প্রতিটি ফাইলের জন্য অগ্রগতি দেখায়, সম্পূর্ণ অনুলিপি অপারেশনের জন্য নয়। আপনি যদি অনেক ক্ষুদ্র ফাইলের সাহায্যে ডিরেক্টরি সরানোর চেষ্টা করছেন তবে এটি অকেজো হতে পারে। আরএসআইএনসি-র সর্বশেষ বিকাশের সংস্করণটিতে একটি বিকল্প পতাকা রয়েছে --info=progress2
যা পুরো ক্রিয়াকলাপের জন্য অগ্রগতি দেখায়।
থেকে প্রগতি দণ্ড যোগ করার জন্য প্যাচিং coreutil এড়াতে mv
এবং cp
, gcp
(Goffi এর কপিয়ার) একটি নতুন বিকল্প নেই: http://wiki.goffi.org/wiki/Gcp/en
পুনরাবৃত্তির জন্য এবং ভার্বোসিটির জন্য একই cp
বিকল্প -r
ব্যবহার করা -v
।
একসাথে একাধিক কমান্ড আহ্বান করা হলে এটি একটি ফাইল সারি ব্যবহার করে। এটি কোনও লগে অনুলিপি করা ফাইলের ফাইলগুলি রেকর্ড করার অনুমতি দেয়, বিশদের জন্য উত্স সংরক্ষণকারী পৃষ্ঠা পৃষ্ঠা বিভাগ দেখুন।
এখানে শুরু করার জন্য একটি ভাল টিউটোরিয়াল gcp
: http://mylinuxbook.com/gcp-advanced-command-line-file-copier-inspired-by-cp/
প্রথম বন্ধ: আমি আয়নিস ব্যবহার না করে কখনও কখনও বড় ফাইলগুলি অনুলিপি করি না, যদি না আমি জানি যে আমি আধা ঘন্টা বা তার বেশি কম্পিউটার ব্যবহার করতে চাই না।
দ্বিতীয়: আমার সমস্ত পার্টিশন জোর করে দেওয়া হয়েছে তাই অন্তর্ভুক্তির অনুলিপি করতে সময় লাগে না। যদি এটি দীর্ঘ কপি হয় তবে আমি du -sm
ফাইলগুলিতে এবং এটি করতে পারি df -m | grep copy_to_partition
। তারপরে যদি কৌতূহলী হয় তবে আরও কত সময় লাগবে তা df
আবার করব এবং দেখুন ফাইলগুলির কতটা অনুলিপি করা হয়েছিল।
আমার পুদিনায় আমি এই বা কার্ল-সমাধান (যা সত্যিই দুর্দান্ত) এর জন্য জিসিপি ব্যবহার করতে চাই
gcp SOURCE DESTINATION
আপনার এটি ইনস্টল করার প্রয়োজন হতে পারে sudo apt-get install gcp
এবং প্রগতি বারের জন্য তথ্যের সাথে একটি খুব সুন্দর এবং দুর্দান্ত কাজ
একটি সুন্দর পাঠযোগ্য বিন্যাসে:
curl -o DESTINATION FILE://source
এছাড়াও, আপনার প্রথমে এটি ইনস্টল করার প্রয়োজন হতে পারে sudo apt-get install curl
gcp
ফাইল সরানো সমর্থন করে না, অর্থাত্ উত্স ফাইলগুলি সফল অনুলিপি করার পরে ম্যানুয়ালি অপসারণ করতে হবে।
এটি আপনাকে অগ্রগতি বার দেয় না, তবে আঘাত করে CTRL-T
আপনি একটি প্রেরণ SIGINFO
করবেন mv
, এটি কোন ফাইলটির কাজ করছে এবং প্রক্রিয়াটি কতটা এগিয়ে রয়েছে তা রিপোর্ট করবে। বড় ফাইল ট্রান্সফারগুলির জন্য এটি বেশ সুন্দর, সম্ভবত অনেকগুলি ছোট ফাইলের সাথে স্থানান্তর করার পক্ষে তেমন কার্যকর নয়।
দ্রুত উদাহরণ:
mv 135/61 /Volumes/Jules/135/
# hit C-t
load: 1.08 cmd: cp 35470 uninterruptible 0.00u 0.04s
135/61/1/1-s2.0-S006738-main.pdf -> /Volumes/Jules/135/61/1/1-s2.0-S006738-main.pdf 68%
INFO: unknown signal; killall -l lists signals.
আমি মনে করেছি যে সাইন ইনফও কেবলমাত্র কয়েকটি বিএসডি-তে রয়েছে, স্ট্যান্ডার্ড পসিক্সে নয়।
mv -v
প্রতি সরানো ফাইলের জন্য এক লাইন মুদ্রণ করতে এবং pv -l
লাইন গণনার উপর ভিত্তি করে অগ্রগতি মুদ্রণের জন্য ব্যবহার করুন (ফলস্বরূপ ফাইল গণনায়)
আপনার দরকার হবে pv
(পাইপ ভিউয়ার): http://www.ivarch.com/program/pv.shtml
mv -v sourcedir targetdir | pv -l -s filecount > logfile
ফাইল গণনা পেতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন:
find sourcedir | wc -l
এই কমান্ডটি অনুলিপি করা ফাইলের সংখ্যার ভিত্তিতে অগ্রগতির তথ্য প্রদর্শন করবে। অনেকগুলি ছোট ছোট ফাইল থাকলে এটি সর্বোত্তম কাজ করে। যদি কয়েকটি কয়েকটি ফাইল বিশাল হয় তবে আপনার খুব মজা হবে না।
নোট করুন যে mv
একই পার্টিশনে দ্রুত হওয়া উচিত। mv
অন্য বিভাজনে cp source target
অনুসরণ করা একই হবে rm source
। সুতরাং অগ্রগতি তথ্য সহ ডিরেক্টরি কপির জন্য দুটি কমান্ড।
অনুলিপি করা ফাইলের সংখ্যার ভিত্তিতে অগ্রগতি রিপোর্ট করতে:
cp -av sourcedir targetdir | pv -l -s filecount > logfile
অনুলিপি করা বাইটের ভিত্তিতে অগ্রগতির প্রতিবেদন করতে:
tar c sourcedir | pv -s size | tar x -C targetdir
আরও বিশদের জন্য এখানে দেখুন: ডিরেক্টরি কপির জন্য পিভি এর মাধ্যমে অগ্রগতির তথ্য
আমি 'এমভি' কমান্ড শুরু করার পরে অবিচ্ছিন্নভাবে এই উত্তরটির সন্ধান শেষ করি, আমি আবার এটি শুরু করতে চাই না। আপনি যদি এই পরিস্থিতিতে থাকেন তবে অগ্রগতি পর্যবেক্ষণ করার জন্য খুব সহজ উপায় (বা এটি হত্যার পক্ষে মোটেও উপযুক্ত নয় কিনা তা দেখুন) চালানোর জন্য:
du -hs /directory/you're/moving/data/to
এটি কেবল ডিরেক্টরিটির আকারটি প্রিন্ট করবে যাতে আপনি দেখতে পাচ্ছেন যে কতটা ডেটা অনুলিপি করা হয়েছে, বা আপনি তথ্যটি কত দ্রুত স্থানান্তরিত করা হচ্ছে তা দেখতে কয়েকবার চালাতে পারেন।