用于将数据附加到文件中的bash脚本

时间:2010-11-17 02:22:50

标签: bash

我正在尝试编写一个bash脚本,该脚本将文件作为$ 1复制,然后将其复制并将年,月和日期附加到文件的末尾。因此,例如,如果我有一个文件foo.txt,它将变成foo.txt.2010.11.16。我真的不是100%确定如何做到这一点,有什么建议吗?

2 个答案:

答案 0 :(得分:3)

简单版本:

#!/bin/bash
cp "$1" "$1".`date +%Y.%m.%d`

发烧友版本:

#!/bin/bash
#
#  date_tag_files file1 [file2 file3 ...]
#
for f in $*
do
    cp "$f" "$f".`date +%Y.%m.%d`
done

答案 1 :(得分:1)

您可以使用$(date ...)将当前日期转换为环境变量。

以下脚本允许您传入任意数量的文件名,它会尝试将所有文​​件名复制到附加日期的类似文件中。

如果您尝试在午夜左右运行它,则会获得一次的日期,即使您在此过程中进入第二天,也希望它们都能获得相同的日期。

#!/usr/bin/bash

if [[ $# -lt 1 ]] ; then
    echo 'Usage: datecp <filename> ...'
    exit 1
fi

dt=$(date +%Y.%m.%d)
while [[ $# -ne 0 ]] ; do
    if [[ ! -f "$1" ]] ; then
        echo 'Warning:' $1 'is not a regular file, not copied'
    else
        newf="$1.$dt"
        cp "$1" "$newf"
        echo "$1" '-->' "$newf"
    fi

    shift
done

最后一个的输出是:

pax> datecp
Usage: datecp <filename> ...

pax> datecp xyz
xyz --> xyz.2010.11.17

pax> datecp xyz abc
xyz --> xyz.2010.11.17
abc --> abc.2010.11.17

pax> ./qq.sh xyz qwert abc
xyz --> xyz.2010.11.17
Warning: qwert is not a regular file, not copied
abc --> abc.2010.11.17