愚蠢的 tar 技巧

作者:LJ Staff

在 Linux 系统上打包文件的最常见程序之一是古老的 tar。 tar 是 tape archive(磁带归档)的缩写,最初,它会将您的文件归档到磁带设备。 现在,您更有可能使用文件来创建归档。 要使用 tarfile,请使用命令行选项 -f。要创建新的 tarfile,请使用命令行选项 -c。要从 tarfile 中提取文件,请使用选项 -x。 您还可以通过两种方法压缩生成的 tarfile。 要使用 bzip2,请使用 -j 选项,对于 gzip,请使用 -z 选项。

除了使用 tarfile,您还可以通过使用连字符 (-) 将 tarfile 输出到 stdout 或从 stdin 输入 tarfile。 通过这些选项,您可以使用以下命令打包一个目录及其所有子目录

tar cf archive.tar dir

然后,使用以下命令将其提取到另一个目录中

tar xf archive.tar

创建 tarfile 时,可以使用选项 -V 分配卷名。您可以通过执行以下命令使用 tar 移动整个目录结构

tar cf - dir1 | (cd dir2; tar xf -)

您可以更进一步,通过执行以下命令通过网络移动整个目录结构

tar cf - dir1 | ssh remote_host "( cd /path/to/dir2; tar xf - )"

GNU tar 包含一个选项,允许您跳过 cd 部分,-C /path/to/dest。 您还可以通过在 tarfile 名称中包含主机部分来通过网络与 tarfile 交互。 例如

tar cvf username@remotehost:/path/to/dest/archive.tar dir1

这是通过使用 rsh 作为通信机制来完成的。 如果您想使用其他的东西,例如 ssh,请使用命令行选项 --rsh-command CMD。 有时,您可能还需要提供远程主机上 rmt 可执行文件的路径。 在某些主机上,它不会位于默认位置 /usr/sbin/rmt。 因此,总而言之,这将如下所示

tar -c -v --rsh-command ssh --rmt-command /sbin/rmt 
 ↪-f username@host:/path/to/dest/archive.tar dir1

虽然 tar 最初用于将其归档写入磁带驱动器,但它可用于写入任何设备。 例如,如果您想将当前文件系统的转储转储到辅助硬盘驱动器,请使用

tar -cvzf /dev/hdd /

当然,您需要以 root 身份运行上述命令。 如果您要将 tarfile 写入太小的设备,您可以告诉 tar 使用 -M 选项执行多卷归档。 对于那些足够老记得软盘的人来说,您可以通过执行以下操作将您的主目录备份到一系列软盘

tar -cvMf /dev/fd0 $HOME

如果您正在进行备份,您可能需要保留文件权限。 您可以使用 -p 选项来执行此操作。 如果您的文件系统上有符号链接文件,您可以使用 -h 选项取消引用符号链接。 这告诉 tar 实际转储符号链接指向的文件,而不仅仅是符号链接。

同样,如果您挂载了多个文件系统,您可以告诉 tar 使用选项 -l 仅坚持一个文件系统。 希望这能为您提供大量归档文件的方法的想法。

加载 Disqus 评论