फ़ाइलों को सिंक करने के लिए लिनक्स जिप का उपयोग कैसे करें


1

मैं अपनी फ़ाइलों को ज़िप में "सिंक" करना चाहता हूं, किसी भी नए को बनाना, किसी भी नए को अपडेट करना, और लोगों को ज़िप से हटाना जो अब मौजूद नहीं हैं।

जब मैंने इस्तेमाल किया -du, तो मैंने देखा

zip error: Invalid command arguments (specify just one action)

इसे करने का बेहतरीन तरीका क्या है?

जवाबों:


1

मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका यह है कि पूरी फाइल को डिलीट कर दिया जाए और फिर से डायर को जिप किया जाए।

'-D' पैरामीटर, जिप से दी गई फाइलों को हटाने के लिए सापेक्ष फाइल पथ की अपेक्षा करता है। '-U' विकल्प ज़िप में नई फाइलें जोड़ता है (या अपडेट करता है)। उनका एक साथ उपयोग नहीं किया जा सकता है।

मुझे यकीन नहीं है कि आप zip कमांड का उपयोग करके आसानी से अपडेट / डिलीट कर सकते हैं। हालाँकि मैंने आपको एक सरल स्क्रिप्ट लिखी है जो आप चाहते हैं कि कर सकते हैं। स्क्रिप्ट को संपादित करने के लिए स्वतंत्र महसूस करें - अब इसके लिए आर्काइव और निर्देशिका की आवश्यकता होती है, जिसे आप एक ही स्थान पर ज़िप / अपडेट करना चाहते हैं (उदाहरण के लिए /home/you/archive.zip और / home / you / directory_to_zip। इसके अलावा) ज़िप में खाली निर्देशिका नहीं जोड़ता है।

#!/bin/bash

archive="archive_name.zip"
directory="dir_to_zip"

#Get list of files in archive
filesinarchive=`unzip -l $archive | sed 's/[ ][ ]*/ /g' | grep 2014 | cut -d" " -f 5 | sort`

#Uncomment when debugging
#echo -e "Files in archive:\n$filesinarchive"

#Get list of files in directory..
filesindirectory=`find $directory/ -type f | sort`

#Uncomment when debugging
#echo -e "\n\nFiles in Directory:\n$filesindirectory"

#Save the lists to tmp files..
echo "$filesinarchive" > /tmp/fia
echo "$filesindirectory" > /tmp/fid


#Compare file lists and return the files present in archive and NOT present in directory
remove=$(comm -1 -3 /tmp/fid /tmp/fia)

#Uncomment when debugging
#echo -e "\n\n\n Files to be deleted:\n$remove \n\n"


#Now delete these files from zip
for file in $remove
do
        zip -d $archive $file
done


#We have deleted files which were not present in the directory, now we need to update our zip:
zip -R -u $archive $filesindirectory

#delete temp files
rm -f /tmp/fia /tmp/fid

ऊपर दी गई सामग्री को zipsync.sh नामक फ़ाइल में सहेजें, इसे निष्पादित अनुमतियाँ (chmod + x zipsync) दें और संग्रह और निर्देशिका को ज़िप के साथ निर्देशिका में होने पर चलाएँ।

आप स्क्रिप्ट को संशोधित कर सकते हैं ताकि यह गैर-सापेक्ष पथ और / या खाली निर्देशिका ले सके।

आशा है इससे थोडी मदद मिलेगी।


धन्यवाद। कारण जो मैं शुरू नहीं करना चाहता था (यदि संभव हो तो) क्योंकि यह केवल उन फ़ाइलों को बदलने के लिए तेज़ है जो बदल गए हैं।
पॉल ड्रेपर

कोई दिक्कत नहीं है। कृपया प्रश्न के उत्तर के रूप में चिह्नित करें या मददगार होने पर वोट दें। धन्यवाद।
जिवी

1

जांच करें fuse-zip। परियोजना विवरण से:

fuse-zip C ++ में कार्यान्वित libzip में आधारित ज़िप अभिलेखागार को नेविगेट करने, निकालने, बनाने और संशोधित करने के लिए एक FUSE फाइल सिस्टम है।

फ्यूज-जिप के साथ आप वास्तव में जिप अभिलेखागार के साथ वास्तविक निर्देशिका के रूप में काम कर सकते हैं। KIO या Gnome VFS के विपरीत, इसका उपयोग बिना किसी संशोधन के किसी भी एप्लिकेशन में किया जा सकता है।

यह कुछ निर्देशिका में ज़िप संग्रह को "माउंट" करना संभव बनाता है। को देखो प्रलेखन उदाहरण के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.