从另一个目录 tar 文件而不复制它们

从另一个目录 tar 文件而不复制它们

对于这里的专家来说这应该很简单。

我有一个Linux帐户,用户磁盘配额只有6GB。有一些数据文件夹包含/opt大约 3GB 的数据,压缩后可达 1GB。里面有一些符号链接data-folder。通常,为了进行工作备份,我常常执行以下操作。

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

现在我的用户磁盘配额已经消耗了 2.5GB,我只有足够的空间将文件复制到我的家中,但不能tar再复制到我的家中。

有没有办法在单个命令中压缩并复制文件夹,例如使用管道。

PS 我无法压缩,/opt因为我只有读取权限/opt

答案1

您想在远离需要 tar 文件的位置创建 tar 文件吗?

有很多方法可以做到这一点。

如果要在本地创建(=在同一台机器上):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

您可以在该命令末尾将其他文件或目录添加到 tar 中。

如果要远程创建(即,您想要在远程主机上从包含要去皮的数据的主机上创建 tar 文件):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

后来的版本非常通用。例如,您还可以使用相同的技术“复制”目录+子目录:

将目录+子目录复制到另一个本地目录:

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

将目录+子目录复制到另一个远程目录:

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

如果您不需要它来显示已压缩(或未压缩)的文件,请删除“v”:这样它会运行得更快,但除非出现错误,否则不会说太多。

我使用“./...”作为源来强制 tar 将其存储为相对路径。在某些情况下,您需要添加额外的路径信息:

例如,要压缩 crontab 文件(包括 /etc 中的文件),您可以执行以下操作:

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

我故意使用相对路径:某些旧版本的 tar 可能很危险,并使用其原始全局路径提取文件,这意味着您可以这样做:cd /safedir ; tar xvf sometar并让具有全局名称的文件覆盖其原始路径(位于 /safedir 之外)的文件而不是在它下面!非常危险,但仍然有可能,因为那里有旧的生产服务器。最好始终使用相对路径,即使您使用更新的 tar。

答案2

使用-htar 选项。从手册页:

-h, --dereference
don't archive symlinks; archive the files they point to

所以你可以使用tar -zcvfh data-folder.tar.gz /opt/data-folder

相关内容