मैंने एक ड्राइव से दूसरे ड्राइव पर फाइल कॉपी करने के लिए टर्मिनल का इस्तेमाल किया।
sudo mv -vi /location/to/drive1/ /location/to/drive2/
हालाँकि, यह अचानक बंद हो गया, जबकि कुछ घंटों में, और एक त्रुटि के बिना, एक निर्देशिका बनाने के बाद।
मेरा अपना समाधान अक्सर हैशिंग और तुलना का मिश्रण होता है, जो ज्यादातर समय लेने वाली गड़बड़ी होती है क्योंकि मुझे अब एक इंटरमीडिएट कॉपी से उबरना पड़ता है बिना यह जाने कि कौन सी फाइलें गायब हैं (zsh के लिए बहुत लंबे वन-लाइनर के रूप में लिखा गया है - ध्यान दें) यह स्क्रिप्ट लिखित रूप में काम नहीं करती है):
source_directory="/path/to/source_directory/";
target_directory="/path/to/target_directory/";
while read hash_and_file; do {
echo "${hash_and_file}" | read hash file;
echo "${file}" | sed "s/^/${source_directory}/g" | read copy_from;
echo "${copy_from}" | sed "s/${source_directory}/${target_directory}/g" | read copy_to;
mv -v "${copy_from}" "${copy_to}" | tee -a log;
rm -v "${copy_from}" | tee -a log; };
done <<<$(
comm -23 <( find ${source_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${source_directory}: :g" | sort;
) <( find ${target_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${target_directory}: :g" | sort; ) )
यह त्रुटि प्रवण है यदि नाम लक्ष्य निर्देशिका या source_directory पथ का हिस्सा है, और फ़ाइलों को हटा दें यदि उन्हें स्थानांतरित नहीं किया गया है क्योंकि उन्हें डुप्लिकेट के रूप में चिह्नित किया गया था। इसके अलावा यह अंत में स्रोत निर्देशिका नहीं करता है।
वहाँ एक सबसे अच्छा अभ्यास कैसे बाधित एमवी से उबरने के लिए है?
--delete-during receiver deletes during the transfer
और कई अन्य उपयोगी विकल्प भी --delete --delete-before --delete-delay --delete-after --delete-excluded
:। तो, हाँ, rsync सबसे अच्छा विकल्प है,
mv
काम क्यों नहीं दोहरा रहा है ? *
मूल स्रोत एक निर्देशिका था, तो शायद स्रोत पथ में जोड़ा गया।
rsync --delete*
कि एक आपदा होगी ! यह उन चीजों को हटा देगा, dest
जो वर्तमान में नहीं हैं src
, इसलिए सभी फाइलें जो पिछले प्रयास में सफलतापूर्वक स्थानांतरित हो गई थीं, अब हटा दी जाएंगी! आप शायद सोच रहे थे rsync --remove-source-files
कि मैं सहमत हूं कि एक अच्छा विकल्प होगा। ( More1 , और जानें 2 )
rsync --delete
देगा जो स्रोत का हिस्सा नहीं हैं। [आदमी rsync] () से * नष्ट dirs से असंगत फ़ाइलों को हटाएं *। समझें कि बाहरी का क्या मतलब है: सिंक नहीं किया जा रहा है। और हाँ, rsync स्रोत फ़ाइलों को हटाने का एक तरीका भी प्रदान करता है , क्योंकि वे सही ढंग से प्रेषित किए जाते हैं।
cmp
हैशिंग के बजाय उपयोग करता है । इसमें निर्भरताएं हैं, औरwhile read
गिल्स के उल्लेख के साथ वही मुद्दे हैं । यह धीमा और क्रियाशील भी है। लेकिन यह rsync विधि की तुलना में जल्द ही डिस्क-स्पेस को मुक्त कर देता है, क्योंकि फाइल (re) स्रोत से चलती है क्योंकि यह चलती है। यह बहादुर के लिए प्रेरणा का काम कर सकता है।