如何使用Linux zip来同步文件


0

我想将我的文件“同步”到zip,创建任何新文件,更新任何新文件,以及从不再存在的zip中删除文件。

我用的时候 -du, 我知道了

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

做这个的最好方式是什么?

Answers:


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文件系统,用于导航,提取,创建和修改基于用C ++实现的libzip的ZIP存档。

使用fuse-zip,您可以使用ZIP存档作为真实目录。与KIO或Gnome VFS不同,它可以在任何应用程序中使用而无需修改。

这使得可以在某个目录中“安装”zip存档。看着 文件 举些例子。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.