আমি কীভাবে ফাইলগুলি স্থানান্তর করতে পারি এবং অগ্রগতিটি দেখতে পারি (যেমন অগ্রগতির বার সহ)?


118

বড় ডিরেক্টরি ব্যবহার করে সরানোর সময় mv, অগ্রগতি (%) দেখার কোনও উপায় আছে কি? cpজেন্টু কমান্ড একটি ছিল -gসুইচ উন্নতি দেখিয়েছেন যে।



উত্তর:


50

আপনি একটি প্যাচড সিপি এবং এমভি তৈরি করতে পারেন যা উভয়ই অগ্রগতি দেখানোর জন্য -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এবং সরাসরি অগ্রগতি বারটি নেওয়া দরকার।


2
দুর্ভাগ্যক্রমে "এই পৃষ্ঠায়" প্যাচটি আর উপস্থিত নেই এবং ওয়েব সংরক্ষণাগারে সূচিকৃত বলে মনে হয় না। অনুরূপ নাম এবং ফাংশন সহ অনেকগুলি প্যাচ উপস্থিত রয়েছে , আপনি কোনটি বোঝাতে চেয়েছিলেন তা পরিষ্কার করার জন্য আপনি নিজের উত্তরটি সম্পাদনা করতে পারবেন?
গিলস

আমি মনে করি github.com/atdt/advcpmv একটি বৈধ উত্তরসূরি এবং এটিতে একই প্যাচ রয়েছে তাই আমি লিঙ্কটি এটিতে চিহ্নিত করেছি।
fschmitt

93

যখন সহজ সমাধান রয়েছে তখন কোর্টিল থেকে বাইনারিগুলি ওভাররাইট করার ধারণাটি আমি পছন্দ করি না, তাই এখানে আমার রয়েছে:

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সমস্ত ধরণের ক্রিয়াকলাপের জন্য একটি প্রসেস বার প্রদর্শন করার জন্য একটি ছোট শেল স্ক্রিপ্ট (সিপি, টার, ইত্যাদি)। আপনি প্রকল্পের হোমপেজে উদাহরণগুলি খুঁজে পেতে পারেন

এটি বোর্ন শেলের জন্যও রচিত, তাই এটি সর্বত্রই চলবে।


3
barmvএখনও জড়ান না।
টুবু


1
দ্রষ্টব্য যে rsyncপ্রতিস্থাপন করে না mv(ওপি সম্পর্কে জিজ্ঞাসা করছে) পুরোপুরি, বিশেষত যখন অনুলিপি অনুলিপি ফাইল সিস্টেমে দ্রুত অনুলিপি আসে btrfs
কার্ল রিখটার

74

একটি নতুন সরঞ্জাম বলা হয়েছে progressযা একটি চলমান কমান্ড সম্পর্কিত যে কোনও বর্ণনাকারী খুঁজে পেতে পারে এবং অগ্রগতি এবং গতি প্রদর্শন করতে পারে: এখানে উপলভ্য

progress -w

সমস্ত চলমান সিপি, এমভি ইত্যাদি ক্রিয়াকলাপের পরিসংখ্যানগুলি আউটপুট করে


3
বাহ, আমি এতটা দুর্দান্ত হওয়ার আশা করিনি! আমি progressইনস্টল করার পরে কেবল টাইপ করেছি এবং এটি mvবর্তমানে যে কমান্ডটির জন্য অপেক্ষা করছিলাম তার জন্য অগ্রগতি উপস্থাপন করেছে। ধন্যবাদ!
jredd

3
ধন্যবাদ! রুট হিসাবে স্টাফগুলি সরানোর সময় মনে হয় আপনাকে ব্যবহার করতে হবে sudo(আমার ধারণা একই ব্যবহারকারী) - আপনি watchপ্রতি 2 সেকেন্ডে কী ঘটছে তা বলতেও পারেন :watch progress -w
উইলফ

6
অসাধারণ প্রোগ্রাম, তবে উদাহরণস্বরূপ যখন অনেকগুলি ফাইল সহ একটি ফোল্ডারটি সরানো হয় তখন এটি কেবলমাত্র বর্তমান ফাইলটির অগ্রগতি দেখায়, পুরো ফোল্ডারটি মোট নয়। পরিবর্তে watch progress -wআপনি সহজেই ব্যবহার করতে পারেনprogress -m
mxmlnkn

6
আইএমএইচও, সমস্যা সমাধানের জন্য এটি সর্বাধিক একতরফা উপায়। কোরিউটিলগুলি প্যাচিং বা নির্দিষ্ট উদ্দেশ্যে (এমভির জন্য আরএসসিএনসি) বা ওভারকিলিং স্ক্রিপ্টগুলি লেখার জন্য নয় এমন সরঞ্জামগুলি ব্যবহার করার পরিবর্তে কেবল বিষয়টির জন্য প্রেমের সাথে লেখা সেই সরঞ্জামটি ব্যবহার করুন।
দুঃখ

34

অগ্রগতি বারটি দেখানোর জন্য আপনি পাইপ দর্শকের কমান্ডটি ব্যবহার করতে পারেন pv:

pv /original/file > /new/file

আমি প্রায়শই এটি একটি মাউন্ট করা নেটওয়ার্ক ফাইল সিস্টেমের ( gzipএবং এর সাথে একত্রিত tar) একটি বড় ফাইল অনুলিপি করতে ব্যবহার করি । অপূর্ণতা হ'ল আপনি কেবল একটি ফাইল অনুলিপি করতে পারেন ডিরেক্টরিকে নয়। এবং আপনাকে অবশ্যই নতুন ফাইলটির একটি নাম দিতে হবে, আপনি কেবল গন্তব্য ডিরেক্টরিটি দিতে পারেন cpনা। তবে অনুলিপি করা pvউদ্দেশ্য নয়। এটি একটি শক্তিশালী সরঞ্জাম এবং কেবল অনুলিপি ফাইলের চেয়ে অনেক বেশি কাজ করে। আরও উদাহরণের জন্য হোমপেজটি দেখুন pv

আরও ভাল বিকল্প ব্যবহার করা হয় rsync -aPmvপরিবর্তে আপনি চাইলে পতাকাটি যুক্ত করুন --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পিভিতে পাস করেন তবে এটি আপনাকে অগ্রগতিও দিতে পারে।
আরান্টিয়াস

6

আপনার লক্ষ্য যদি অগ্রগতি বারের সাথে একটি ডিরেক্টরি সরানো / অনুলিপি করা হয় তবে নন-টার্মিনাল জিইউআই, এমসি (মিডনাইট কমান্ডার) এড়ানো ভাল পছন্দ।


3

আমার সমাধানটি ব্যবহার করা 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যা পুরো ক্রিয়াকলাপের জন্য অগ্রগতি দেখায়।


2

থেকে প্রগতি দণ্ড যোগ করার জন্য প্যাচিং 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/


সিপির জন্য জিসিপি-র মতো জিএমভি কি আছে?
কোডিচান

আমি কোন সমতুল্য খুঁজে পেয়েছি। যাইহোক, একক ফাইল সিস্টেমে "এমভি" চালানোর সময় অগ্রগতির বারের প্রয়োজন নেই ... এটি বেশ দ্রুত। যদি দুটি পৃথক ফাইল সিস্টেমের মধ্যে সরানো হয়, এটি সিপি হিসাবে প্রয়োগ করা হয় এবং তারপরে সফল হলে উত্সটি সরান, অথবা ব্যর্থ হলে লক্ষ্য সরিয়ে ফেলুন। জিসিপি ভিত্তিক একটি সাধারণ শেল স্ক্রিপ্ট এটি সঠিকভাবে করতে পারে (উত্স এবং টার্গেটটি বিভিন্ন ফাইল সিস্টেমে সত্যই আছে কিনা তা জানতে প্রথম চেক সহ)
ইয়ভেস মার্টিন

2

প্রথম বন্ধ: আমি আয়নিস ব্যবহার না করে কখনও কখনও বড় ফাইলগুলি অনুলিপি করি না, যদি না আমি জানি যে আমি আধা ঘন্টা বা তার বেশি কম্পিউটার ব্যবহার করতে চাই না।

দ্বিতীয়: আমার সমস্ত পার্টিশন জোর করে দেওয়া হয়েছে তাই অন্তর্ভুক্তির অনুলিপি করতে সময় লাগে না। যদি এটি দীর্ঘ কপি হয় তবে আমি du -smফাইলগুলিতে এবং এটি করতে পারি df -m | grep copy_to_partition। তারপরে যদি কৌতূহলী হয় তবে আরও কত সময় লাগবে তা dfআবার করব এবং দেখুন ফাইলগুলির কতটা অনুলিপি করা হয়েছিল।


আপনি কি আপনার আয়নিস টিপস ভাগ করে যত্ন নেবেন? আপনি এমভি সিপু-বুদ্ধিমান এবং ডিস্ক i / o বুদ্ধিমানকে কোন অগ্রাধিকার দেবেন? এখানে আমার সেটিংস রয়েছে তবে সিএনইউ লোডটি এখনও পুনর্নবীকরণের পরেও বেশি: imgur.com/a/DLMJplz
ychaouche

2

আমার পুদিনায় আমি এই বা কার্ল-সমাধান (যা সত্যিই দুর্দান্ত) এর জন্য জিসিপি ব্যবহার করতে চাই

gcp SOURCE DESTINATION

আপনার এটি ইনস্টল করার প্রয়োজন হতে পারে sudo apt-get install gcp

এবং প্রগতি বারের জন্য তথ্যের সাথে একটি খুব সুন্দর এবং দুর্দান্ত কাজ

  • % মোট
  • % প্রাপ্ত
  • % এক্সফার্ড
  • গড় ডিএল
  • গতি আপলোড
  • সময় বাকি
  • সময় অতিবাহিত
  • সময় মোট
  • বর্তমান গতি

একটি সুন্দর পাঠযোগ্য বিন্যাসে:

curl -o DESTINATION FILE://source

এছাড়াও, আপনার প্রথমে এটি ইনস্টল করার প্রয়োজন হতে পারে sudo apt-get install curl


gcpফাইল সরানো সমর্থন করে না, অর্থাত্ উত্স ফাইলগুলি সফল অনুলিপি করার পরে ম্যানুয়ালি অপসারণ করতে হবে।
কার্ল রিখটার

2

এটি আপনাকে অগ্রগতি বার দেয় না, তবে আঘাত করে 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%

1
এটি আমার পক্ষে কার্যকর হয়নি: আমি পেয়েছি যে INFO: unknown signal; killall -l lists signals. আমি মনে করেছি যে সাইন ইনফও কেবলমাত্র কয়েকটি বিএসডি-তে রয়েছে, স্ট্যান্ডার্ড পসিক্সে নয়।
ব্রায়ান মিন্টন

2
ঠিক। এটি ম্যাক ওএস এক্সে কাজ করে তবে উবুন্টু বলে নাও।
চার্লস

1

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

আরও বিশদের জন্য এখানে দেখুন: ডিরেক্টরি কপির জন্য পিভি এর মাধ্যমে অগ্রগতির তথ্য


1

আমি 'এমভি' কমান্ড শুরু করার পরে অবিচ্ছিন্নভাবে এই উত্তরটির সন্ধান শেষ করি, আমি আবার এটি শুরু করতে চাই না। আপনি যদি এই পরিস্থিতিতে থাকেন তবে অগ্রগতি পর্যবেক্ষণ করার জন্য খুব সহজ উপায় (বা এটি হত্যার পক্ষে মোটেও উপযুক্ত নয় কিনা তা দেখুন) চালানোর জন্য:

du -hs /directory/you're/moving/data/to

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

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