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