我正在将帐户移动到另一台服务器,并且zip -r backup.zip *
在服务器的 home 上使用命令压缩终端中的所有内容/
。正在创建存档,当它到达www
符号链接时,它开始添加之前添加的相同文件夹,但这次在www/
它们前面。如何更改上述命令以排除上面提到的两个符号链接?
TIA
答案1
这就是您正在寻找的内容(来自man zip
):
-y
--symlinks
For UNIX and VMS (V8.3 and later), store symbolic links as such
in the zip archive, instead of compressing and storing the file
referred to by the link. This can avoid multiple copies of
files being included in the archive as zip recurses the direc‐
tory trees and accesses files directly and by links.
或者排除:
zip -r backup.zip * -x "www/*"
示范
假设您有以下符号链接/目录:
$ ls -ld /*
...
lrwxrwxrwx ... /access-logs -> /var/access-logs
lrwxrwxrwx ... /www -> /var/www
...
$ ls -ld /var/*
...
drwxr-xr-x ... /var/access-logs
drwxr-xr-x ... /var/www
...
如果您想同时包含/var/access-logs
和/var/www
,但又不想重复它们的内容,则追加--symlinks
就足够了。/access-logs
并将/www
作为符号链接存储在 zip 文件中。
如果您也不想要/var/access-logs
的内容,您可以附加-x "/var/access-logs/*"
到 zip 命令,它将被排除。
tar
编辑:正如 @Bib 指出的,您可以使用tar
which 命令在 Linux 中归档多个文件。
tar
默认情况下是“无取消引用”(等于--symlinks
中的模式zip
),因此它将仅将符号链接存档为符号链接,它不会像那样遵循它们zip
。
通过选项-I
,我们可以为存档选择一个压缩程序。zstd
具有非常好的比率和速度。但是,如果您确实关心小尺寸改进并且不介意速度慢得多,则可以替换zstd
为xz
.请注意,必须安装您要使用的命令。
存档/*
排除/excluded-dir-1
并/excluded-dir-2
使用zstd
压缩:
tar cvf backup.tar.zst -I "zstd" --exclude="/excluded-dir-1" --exclude="/excluded-dir-2" /*
将存档内容提取到/backup
:
tar xvf backup.tar.zst -C "/backup"