Bash脚本用于存档文件然后复制新文件

时间:2009-09-02 14:51:55

标签: bash shell archive

需要一些帮助,因为我的shell脚本技能略低于l337 :(

我需要gzip几个文件,然后从另一个位置复制更新的文件。我需要能够以下列方式从其他脚本调用此脚本。

exec script.sh $oldfile $newfile

有人能指出我正确的方向吗?

编辑:要添加更多详细信息:

此脚本将用于每月更新上传到文件夹的某些文档,旧文档需要存档到一个压缩文件中,新文档可能有不同的名称,复制到旧文件的顶部。需要通过另一个脚本的文档案例在文档上调用脚本。此脚本的基本流程应为 -

  1. 脚本文件应该创建一个新的gzip 具有指定名称的存档(从脚本中的前缀常量和当前月份和年份创建,例如prefix.september.2009.tar.gz) 尚不存在,否则添加到现有的。
  2. 将旧文件复制到存档中。
  3. 将旧文件替换为新文件。
  4. 提前致谢,
    理查德

    编辑:在存档文件名

    上添加了模式详细信息

3 个答案:

答案 0 :(得分:2)

任何bash脚本的良好参考是Advanced Bash-Scripting Guide

本指南解释了每个bash脚本的内容。

我将采取的基本方法是:

Move the files you want to zip to a directory your create.
   (commands mv and mkdir)

zip the directory. (command gzip, I assume)

Copy the new files to the desired location (command cp)

根据我的经验,bash脚本主要是知道如何很好地使用这些命令,如果你可以在命令行上运行它,你可以在你的脚本中运行它。

另一个可能有用的命令是

pwd - this returns the current directory

答案 1 :(得分:2)

以下是基于您的说明的修改后的脚本。我使用tar存档(使用gzip压缩)将多个文件存储在一个存档中(单独使用gzip无法存储多个文件)。这段代码只是表面测试 - 它可能有一两个错误,如果你在愤怒中使用它,你应该添加更多代码来检查命令成功等。但它应该可以帮到你那里。

#!/bin/bash

oldfile=$1
newfile=$2

month=`date +%B`
year=`date +%Y`

prefix="frozenskys"

archivefile=$prefix.$month.$year.tar

# Check for existence of a compressed archive matching the naming convention
if [ -e $archivefile.gz ]
then
    echo "Archive file $archivefile already exists..."
    echo "Adding file '$oldfile' to existing tar archive..."

    # Uncompress the archive, because you can't add a file to a
    # compressed archive
    gunzip $archivefile.gz

    # Add the file to the archive
    tar --append --file=$archivefile $oldfile

    # Recompress the archive
    gzip $archivefile

# No existing archive - create a new one and add the file
else
    echo "Creating new archive file '$archivefile'..."
    tar --create --file=$archivefile $oldfile
    gzip $archivefile
fi

# Update the files outside the archive
mv $newfile $oldfile

将其另存为script.sh,然后将其设为可执行文件:

chmod +x script.sh

然后像这样跑:

./script.sh oldfile newfile
如果你愿意,可以从另一个脚本中找到``frozenskys.September.2009.tar.gz , will be created, and newfile will replace oldfile . You can call this script with exec`。只需将此行放在第二个脚本中:

exec ./script.sh $1 $2

答案 2 :(得分:0)

为什么不使用版本控制?这更容易;退房,压缩。

(如果不是选项则道歉)