当涉及到在 Unix 和类 Unix 系统中进行文件归档和压缩时,
tar
命令是一个非常有用的工具。它用于创建归档文件,通常称为 “tarball”,这些文件可以包含一个或多个文件和目录,并且可以选择是否对这些文件进行压缩。
以下是一些关于tar
命令的基本用法和选项:
- 创建归档文件:
使用tar
命令创建一个归档文件,不进行压缩:
tar -cvf archive.tar file1.txt file2.txt dir1/
- 解压归档文件:
使用tar
命令解压一个归档文件:
tar -xvf archive.tar
- 创建并压缩归档文件:
使用tar
命令创建一个归档文件,并对其进行 gzip 压缩:
tar -czvf archive.tar.gz file1.txt file2.txt dir1/
- 解压并解压缩归档文件:
使用tar
命令解压并解压缩一个归档文件:
tar -xzvf archive.tar.gz
- 查看归档内容:
使用tar
命令查看归档文件中的内容,不提取文件:
tar -tvf archive.tar
- 指定目标目录:
使用-C
选项来指定解压或提取文件的目标目录:
tar -xvf archive.tar -C /path/to/target_directory
- 仅提取部分文件:
使用--extract
(或-e
)选项来提取归档文件中的特定文件:
tar -xvf archive.tar --extract file1.txt
- 常见选项解释:
-c
:创建归档文件。-x
:提取归档文件。-v
:显示操作详细信息。-f
:指定归档文件的名称。-z
:使用 gzip 进行压缩(需要用.tar.gz
扩展名)。-j
:使用 bzip2 进行压缩(需要用.tar.bz2
扩展名)。-C
:指定解压缩的目标目录。
- 仅压缩文件,不创建归档:
如果你只想压缩一个或多个文件,而不创建归档,可以使用-z
选项:
tar -czvf compressed.tar.gz file1.txt file2.txt
- 添加文件到现有归档:
使用--append
(或-r
)选项可以将文件添加到现有的归档中:
tar -rvf archive.tar newfile.txt
- 从归档中删除文件:
使用--delete
选项可以从归档中删除文件:
tar --delete -f archive.tar file1.txt
- 压缩级别设置:
如果你在使用-z
(gzip)或-j
(bzip2)选项进行压缩时想要设置压缩级别,可以使用-#
,其中#
是 1 到 9 之间的数字,数字越大表示压缩级别越高。例如:
tar -czvf archive.tar.gz -9 file1.txt file2.txt
- 排除文件或目录:
使用--exclude
选项可以在创建归档时排除特定的文件或目录。这在制作备份时很有用:
tar -czvf backup.tar.gz --exclude=*.log directory/
- 利用
**find**
和管道(Pipe):
你可以与find
命令结合使用tar
命令,以便在创建归档时根据条件选择文件:
find /path/to/source -type f -name "*.txt" | tar -czvf archive.tar.gz -T -
-
使用
**tar**
的短选项:
在许多情况下,你可以使用tar
的短选项来缩短命令。例如,-xzvf
可以缩写为-xvzf
。 -
显示进度信息:
通过使用--checkpoint
选项,可以显示归档或提取的进度信息。这对于大型归档操作很有用:
tar -czvf archive.tar.gz --checkpoint=1 file1.txt file2.txt
- 保留文件权限和所有者信息:
默认情况下,tar
会保留文件的权限和所有者信息。如果你需要显式地指定,可以使用--same-permissions
和--same-owner
选项:
tar -czvf archive.tar.gz --same-permissions --same-owner file1.txt file2.txt
- 备份目录结构:
如果你只想备份目录的结构,而不复制实际文件,可以使用--directory
选项:
tar -cvf directory_structure.tar --directory=/path/to/source directory/
- 创建并加密归档文件:
使用openssl
和tar
可以创建并加密归档文件,以保护其内容:
tar -cvf - file1.txt file2.txt dir1/ | openssl enc -aes-256-cbc -e > encrypted.tar
- 解密并解压归档文件:
要解密并解压加密的归档文件,可以使用以下命令:
openssl enc -aes-256-cbc -d -in encrypted.tar | tar -xvf -
- 选择特定的压缩工具:
默认情况下,tar
会根据文件名后缀自动选择压缩工具。但是你也可以使用-a
选项手动选择压缩工具,例如:
tar -cavf archive.tar.xz file1.txt file2.txt
- 压缩与解压特定目录:
你可以在压缩和解压时使用-C
选项来指定特定的目录,以避免在归档中创建不必要的目录层次:
tar -czvf archive.tar.gz -C /path/to/source/ directory/
tar -xzvf archive.tar.gz -C /path/to/target/
- 指定压缩格式:
默认情况下,tar
会根据文件扩展名选择压缩格式。你也可以通过使用-a
或--auto-compress
选项,让tar
根据文件扩展名自动选择适当的压缩格式:
tar -cvaf archive.tar.xz file1.txt file2.txt
- 显示压缩进度:
如果你想在压缩过程中显示进度信息,可以使用--checkpoint-action
选项。以下示例每压缩 100 个块时显示进度:
tar -czvf archive.tar.gz --checkpoint-action='echo=%u' file1.txt file2.txt
- 将标准输出传递给另一个命令:
你可以将tar
命令的输出传递给另一个命令,这在创建自定义归档或备份脚本时很有用。例如,将归档直接传递给ssh
:
tar -czvf - file1.txt file2.txt | ssh user@host "cat > archive.tar.gz"
- 备份整个文件系统:
注意,备份整个文件系统可能需要 root 权限,并且需要谨慎操作。你可以使用下面的命令来备份整个文件系统:
sudo tar -cvpzf backup.tar.gz --exclude=/backup.tar.gz -- /
- 解压特定文件到标准输出:
你可以将解压的特定文件直接输出到终端,而不实际提取文件:
tar -xOf archive.tar file1.txt