Как использовать Linux zip для синхронизации файлов


0

Я хочу «синхронизировать» мои файлы с zip-архивом, создавая любые новые, обновляя любые новые и удаляя из zip-файла, которые больше не существуют.

Когда я использовал -du, Я вижу

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

Каков наилучший способ сделать это?

Ответы:


1

Я думаю, что лучший способ сделать это, чтобы удалить весь файл и снова заархивировать папку.

Параметр '-d' ожидает, что относительный путь к файлу удалит данные файлы из zip. Опция -u добавляет (или обновляет) новые файлы в zip. Их нельзя использовать вместе.

Я не уверен, что вы можете легко выполнить обновление / удаление с помощью команды zip. Однако ниже я написал вам простой скрипт, который может делать то, что вы хотите. Не стесняйтесь редактировать скрипт - сейчас он требует, чтобы архив и каталог, в который вы хотите заархивировать / обновить, были в одном месте (например, /home/you/archive.zip и / home / you / directory_to_zip. не добавляет пустые каталоги в 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) и запустите, когда вы находитесь в каталоге с архивом и в каталоге для zip.

Вы можете изменить скрипт так, чтобы он мог принимать не относительные пути и / или архивировать пустые каталоги.

Надеюсь, это немного поможет.


Спасибо вам. Причина, по которой я не хотел начинать сначала (если это возможно), заключается в том, что быстрее менять только те файлы, которые изменились
Paul Draper

Нет проблем. Пожалуйста, отметьте вопрос как ответивший или проголосуйте, если это было полезно. Благодарю.
Ziwi

1

Проверять, выписываться fuse-zip, Из описания проекта:

fuse-zip файловая система FUSE для навигации, распаковки, создания и изменения ZIP-архивов на основе libzip, реализованная на C ++.

С fuse-zip вы действительно можете работать с ZIP-архивами как с настоящими каталогами. В отличие от KIO или Gnome VFS, его можно использовать в любом приложении без изменений.

Это позволяет «монтировать» zip-архив в какой-то каталог. смотреть на документация Например.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.