如何使用 Linux zip 同步文件

如何使用 Linux zip 同步文件

我想将我的文件“同步”到 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 的目录的目录中运行。

您可以修改脚本,以便它可以采用非相对路径和/或压缩空目录。

希望这有所帮助。

答案2

查看fuse-zip. 来自项目描述:

fuse-zip是一个基于 libzip 用 C++ 实现的 FUSE 文件系统,用于导航、提取、创建和修改 ZIP 档案。

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

这样就可以将 zip 存档“挂载”到某个目录中。查看文档举些例子。

相关内容