बड़ी निर्देशिकाओं का उपयोग करते हुए mv
, क्या प्रगति (%) को देखने का एक तरीका है? cp
Gentoo पर आदेश एक था -g
स्विच प्रगति से पता चला कि।
बड़ी निर्देशिकाओं का उपयोग करते हुए mv
, क्या प्रगति (%) को देखने का एक तरीका है? cp
Gentoo पर आदेश एक था -g
स्विच प्रगति से पता चला कि।
जवाबों:
आप एक पैच cp और mv बना सकते हैं जो तब प्रगति दिखाने के लिए दोनों -g स्विच का समर्थन करते हैं। इस पृष्ठ पर निर्देश और पैच हैं । हालाँकि : पृष्ठ आपको करने का निर्देश देता है
$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv
जो मूल सीपी और एमवी को अधिलेखित करता है। इसके दो नुकसान हैं: सबसे पहले, यदि आपके सिस्टम में एक अद्यतन कोरूटिल्स पैकेज आता है, तो वे ओवरराइट किए जाते हैं। दूसरे, यदि पैच किए गए संस्करण में समस्या है, तो वे मानक cp और 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 : रुपीस फ़ाइलों की प्रतिलिपि बनाता है और इसमें -P
प्रगति पट्टी के लिए एक स्विच होता है। इसलिए यदि आपने rsync स्थापित किया है, तो आप अपने गोले dotfile में एक साधारण उपनाम का उपयोग कर सकते हैं:
alias cp='rsync -aP'
नकारात्मक पक्ष यह है, कि rsync cp की तुलना में थोड़ा धीमा है, लेकिन आपको इसे समय के साथ मापना चाहिए और अपने स्वयं के लिए निर्णय लेना चाहिए, मैं इसके साथ रह सकता हूं :-)
शेल स्क्रिप्ट : शेल स्क्रिप्ट प्रगति पट्टी भी बना सकती है। मुझे यह कुछ समय पहले नेट पर मिला था और मुझे स्रोत याद नहीं है:
#!/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% [===============================> ]
बार :
ASCII प्रगति पट्टी के साथ 'बार' - 'कैट'
bar
सभी प्रकार के ऑपरेशन (cp, tar, आदि) के लिए एक प्रक्रिया पट्टी प्रदर्शित करने के लिए एक छोटी सी शेल स्क्रिप्ट है। आप प्रोजेक्ट होमपेज पर उदाहरण पा सकते हैं ।
इसका बोर्न शेल के लिए भी लिखा गया है, इसलिए यह हर जगह पास में चलेगा।
bar
mv
अभी तक लपेट नहीं है।
rsync
प्रतिस्थापित नहीं करता mv
है, खासकर जब यह कॉपी-ऑन-राइट फाइलसिस्टम जैसे फास्ट कॉपी पर आता है btrfs
।
यहां एक नया टूल है जिसे progress
रनिंग कमांड से संबंधित कोई भी डिस्क्रिप्टर मिल सकता है और प्रगति और गति दिखा सकता है:
यहां उपलब्ध है
progress -w
सभी चल रहे cp, mv इत्यादि कार्यों के लिए आँकड़े को आउटपुट करता है
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
इसे पास करना चाहते हैं तो यह आपको प्रगति भी दे सकता है।
यदि आपका लक्ष्य किसी निर्देशिका को प्रगति पट्टी के साथ स्थानांतरित / कॉपी करना है, लेकिन गैर-टर्मिनल GUI, mc (मिडनाइट कमांडर) से बचना एक अच्छा विकल्प है।
मेरा समाधान उपयोग करना है rsync
। यह निर्देशिकाओं की प्रतिलिपि बना सकता है, एक सफल प्रति के बाद स्रोत फ़ाइलों को हटा दें (इस प्रकार "उन्हें" हिलाना) और प्रगति रिपोर्ट प्रदर्शित करें, कई अन्य सुविधाओं के बीच (सबसे विशेष रूप से कॉपी की गई निर्देशिकाओं को सिंक्रनाइज़ करना और नेटवर्क पर काम करना।)
यहां बताया गया है कि मैं प्रगति रिपोर्ट के साथ rsync के साथ एक निर्देशिका कैसे स्थानांतरित करूंगा:
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
विकल्प प्रत्येक फ़ाइल के लिए प्रगति दिखाता है, संपूर्ण कॉपी ऑपरेशन के लिए नहीं। यदि आप एक निर्देशिका को कई छोटी फाइलों के साथ स्थानांतरित करने का प्रयास कर रहे हैं तो यह बेकार हो सकता है। Rsync के नवीनतम विकास संस्करण में एक वैकल्पिक ध्वज है --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 या कर्ल-सॉल्यूशन का उपयोग करना पसंद करता हूं (जो वास्तव में अच्छा है)
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.
लगा कि मुझे लगता है कि SIGINFO केवल कुछ BSDs पर है, मानक POSIX में नहीं।
mv -v
स्थानांतरित प्रति फ़ाइल एक पंक्ति pv -l
को प्रिंट करने और लाइन काउंट (प्रभाव फ़ाइल गणना में) के आधार पर प्रगति को प्रिंट करने के लिए उपयोग करें ।
आपको pv
(पाइप दर्शक) की आवश्यकता होगी : http://www.ivarch.com/programs/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
अधिक जानकारी के लिए यहां देखें: निर्देशिका कॉपी के लिए पीवी के माध्यम से प्रगति की जानकारी
वास्तव में मैं 'mv' कमांड शुरू करने के बाद इस उत्तर को खोजना चाहता हूं, जिस बिंदु पर मैं इसे फिर से शुरू नहीं करना चाहता। यदि आप इस स्थिति में प्रगति की निगरानी करने के लिए एक बहुत ही सरल तरीका है (या यह देखने के लिए कि क्या यह काफी दूर तक साथ है कि यह हत्या के लायक नहीं है):
du -hs /directory/you're/moving/data/to
यह सिर्फ डायरेक्टरी के आकार को प्रिंट करेगा ताकि आप देख सकें कि कितना डेटा कॉपी किया गया है, या आप इसे एक-दो बार चलाकर देख सकते हैं कि डेटा कितनी तेजी से ट्रांसफर हो रहा है।