对于这里的专家来说,这应该很简单。
我有一个用户磁盘配额只有 6GB 的 Linux 帐户。有一些数据文件夹中/opt有大约 3GB 的数据,压缩后会出现 1GB。里面有一些符号链接data-folder。通常为了进行工作备份,我曾经执行以下操作。
cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder
Run Code Online (Sandbox Code Playgroud)
现在我的用户磁盘配额已经消耗了 2.5GB,我有足够的空间将文件复制到我的家,但不能tar再复制到它。
有没有办法在单个命令中使用 tar 和复制文件夹,比如使用管道。
PS我不能tar,/opt因为我只有读取权限/opt。
您想在远离需要 tar 的文件所在的位置创建一个 tar 文件吗?
有很多方法可以做到这一点。
如果要在本地创建(= 在同一台机器上):
tar czvf /path/to/destination/newfile.tar.gz ./SOURCEDIR_OR_FILES
Run Code Online (Sandbox Code Playgroud)
您可以在该命令的末尾向 tar 添加其他文件或目录。
如果要远程创建(即,您想在远程主机上从包含要去皮重的数据的主机上创建 tar 文件):
tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'
Run Code Online (Sandbox Code Playgroud)
后来的版本非常通用。例如,您还可以使用相同的技术“复制”目录 + 子目录:
将目录+子目录复制到另一个本地目录:
tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )
Run Code Online (Sandbox Code Playgroud)
将目录+子目录复制到另一个远程目录:
tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '
Run Code Online (Sandbox Code Playgroud)
如果您不需要 'v' 来显示文件,因为它们是 tar-ed(或 untarred):它会运行得更快,但除非出现错误,否则不会说太多。
我使用“./...”作为源来强制 tar 将其存储为相对路径。在某些情况下,您需要添加额外的路径信息:
例如,要对 crontab 文件(包括 /etc 中的文件)进行 tar,您可以执行以下操作:
cd / ; tar czf all_crons.tgz ./etc/*cron* ./var/spool/cron
Run Code Online (Sandbox Code Playgroud)
我特意使用了相对路径:一些旧版本的 tar 可能是危险的,并用它们的原始全局路径提取文件,这意味着你可以这样做:cd /safedir ; tar xvf sometar并让具有全局名称的文件覆盖其原始路径中的文件,这是 /safedir 的外部而不是在它下面!非常危险,而且仍然有可能,因为那里有旧的生产服务器。最好始终使用相对路径,即使您使用更新的 tar。
使用-htar 选项。从手册页:
-h, --dereference
don't archive symlinks; archive the files they point to
Run Code Online (Sandbox Code Playgroud)
所以你可以使用tar -zcvfh data-folder.tar.gz /opt/data-folder