首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >压缩单个文件而不是整个目录

压缩单个文件而不是整个目录
EN

Stack Overflow用户
提问于 2011-11-11 12:29:02
回答 2查看 2.9K关注 0票数 1

大家好,我已经尝试了几个小时来让我的脚本工作,问题是它不是压缩单个文件,而是压缩整个目录结构。

代码语言:javascript
复制
    #!/bin/sh

# Where to backup to.
mkdir -p /home/knoppix/backups --verbose
dest="/home/knoppix/backups"

# What to backup.
cat /etc/passwd >> /home/knoppix/backups/dbusers.txt
backupdb="/home/knoppix/backups/dbusers.txt"

# Create archive filename.
archive_file="DB$(date +%d%b%Y_%H%M).tgz"

# Print start status message.
echo "Backing up $backupdb to $dest/$archive_file"
date
echo

# Backup the files using tar.
tar czf $dest/$archive_file $backupdb
EN

回答 2

Stack Overflow用户

发布于 2011-11-11 12:39:57

尝试使用tar -C移至以下目录:

代码语言:javascript
复制
#!/bin/sh

# Where to backup to.
mkdir -p /home/knoppix/backups --verbose
dest="/home/knoppix/backups"

# What to backup.
cat /etc/passwd >> /home/knoppix/backups/dbusers.txt
backupdir="/home/knoppix/backups"
backupfile="dbusers.txt"

# Create archive filename.
archive_file="DB$(date +%d%b%Y_%H%M).tgz"

# Print start status message.
echo "Backing up $backupdb to $dest/$archive_file"
date
echo

# Backup the files using tar.
tar czf $dest/$archive_file -C $backupdir $backupfile

GNU tar还提供了一个--transform选项,该选项可用于调整用于创建或提取归档的名称。另一种更改原始脚本的方法是执行如下操作:

代码语言:javascript
复制
#!/bin/sh

# Where to backup to.
mkdir -p /home/knoppix/backups --verbose
dest="/home/knoppix/backups"

# What to backup.
cat /etc/passwd >> /home/knoppix/backups/dbusers.txt
backupdir="/home/knoppix/backups"
backupfile="dbusers.txt"

# Create archive filename.
archive_base_name="DB$(date +%d%b%Y_%H%M)"
archive_file="$archive_base_name.tgz"

# Print start status message.
echo "Backing up $backupdb to $dest/$archive_file"
date
echo

# Backup the files using tar.
tar --transform="s#^$base#$archive_base_name#" czPf $dest/$archive_file $backupdb

--transform的参数告诉我们用一个文本字符串替换另一个文本字符串,比如s#old#new#。正则表达式部分实际上是一种称为正则表达式的模式,^将导致正则表达式仅在行首匹配。P (在czPf中)告诉tar不要删除路径开头的'/‘。因此,在此示例中,将使用以下内容创建tar:

代码语言:javascript
复制
DB11Nov2011_0555/dbusers.txt

如果您现有的归档文件包含名为"dbusers.txt“的文件,则可以使用--transform将其解压缩到其他名称或目录:

代码语言:javascript
复制
tar --transform="s#dbusers#original#" xzf example.tgz # creates original.txt
tar --transform="s#^#output/#" xzf example.tgz        # creates output/dbusers.txt

尝试将v添加到tar选项(czPvf)中,以便在添加或解压文件时显示文件的名称。在使用--transform时,使用--show-transformed-names可能也会有所帮助,这样v标志就可以显示替换的结果,而不是原始名称。

最后,要获得更多的故障排除帮助,请尝试在脚本的顶部(或在tar命令之前)添加set -x。它将导致shell在执行命令之前打印该命令。有用的部分是,在评估变量和通配符之后,它将显示所使用的值。

您甚至可以在命令行中尝试此操作。如果重新关闭,请使用set +x将其关闭:

代码语言:javascript
复制
$ set -x
$ archive_file="DB$(date +%d%b%Y_%H%M).tgz"
++ date +%d%b%Y_%H%M
+ archive_file=DB11Nov2011_0605.tgz
$ echo $archive_file
+ echo DB11Nov2011_0605.tgz
DB11Nov2011_0605.tgz
$ set +x
+ set +x
$ echo $archive_file
DB11Nov2011_0605.tgz
票数 3
EN

Stack Overflow用户

发布于 2011-11-11 12:34:20

这样如何:

代码语言:javascript
复制
# Backup the files using tar.
(cd /home/knoppix/backups/; tar czf $dest/$archive_file dbusers.txt)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8089681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档