大家好,我已经尝试了几个小时来让我的脚本工作,问题是它不是压缩单个文件,而是压缩整个目录结构。
#!/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发布于 2011-11-11 12:39:57
尝试使用tar -C移至以下目录:
#!/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 $backupfileGNU tar还提供了一个--transform选项,该选项可用于调整用于创建或提取归档的名称。另一种更改原始脚本的方法是执行如下操作:
#!/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:
DB11Nov2011_0555/dbusers.txt如果您现有的归档文件包含名为"dbusers.txt“的文件,则可以使用--transform将其解压缩到其他名称或目录:
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将其关闭:
$ 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发布于 2011-11-11 12:34:20
这样如何:
# Backup the files using tar.
(cd /home/knoppix/backups/; tar czf $dest/$archive_file dbusers.txt)https://stackoverflow.com/questions/8089681
复制相似问题