今天,当我想将指定目录中的所有文件和目录打包时,我遇到了这个问题。执行以下操作还不够,因为隐藏文件(.
不包含以 开头的文件):
tar -czvf ~/tarfile.tar.gz /path/to/dir/*
然后我想到了以下几点:
find /path/to/dir/* -execdir /bin/tar -czvf ~/tarfile.tar.gz '{}' +
但这还不够。如果execdir
已达到命令留置权限制并需要重新运行相同的命令并找到其余文件集怎么办?
因此,如果 tar 文件不存在,我需要一个选项或某种方法来创建它。如果存在,则附加到它。试图找到解决这个问题的方法,但没有成功。考虑过-r
这个选项,但没有成功,因为它需要已经创建的 tar 文件的存在。
这是否意味着没有办法,必须编写一个迷你脚本来完成这个逻辑?
答案1
只需使用tar czvf ~/tarfile.tar.gz /path/to/dir/
不带“*”的文件即可防止以“.”开头的文件。免于被包括在内。
如果您想更新现有的文件tarfile.tar.gz
(即向其中添加更多文件),您将需要一个小技巧来更新它,因为 tar 更新“gzipped”文件时会遇到麻烦。此单行代码“解压缩、更新和压缩”文件或创建一个新文件。
[ -f tarfile.tar.gz ] && (gunzip tarfile.tar.gz; tar uf tarfile.tar /path/to/dir/; gzip tarfile.tar) || tar cvfz tarfile.tar.gz /path/to/dir/
最简单的选项是使用tar uf tarfile.tar /path/to/dir/
它创建文件或更新文件。之后您需要手动压缩它(也许首先将其复制到不同的位置)。