我想在文件名旁边添加日期(“somefile.txt”)。例如:somefile_25-11-2009.txt或somefile_25Nov2009.txt或其他任何效果
也许脚本会在终端窗口中执行或执行某些命令。我正在使用Linux(Ubuntu)。
提前致谢。
哦,我几乎忘了添加脚本或命令应该在每次要将文件保存到特定文件夹但仍保留以前的文件时将文件名更新为新日期。所以文件夹中最终会有这样的文件:filename_18Oct2009.txt,filename_9Nov2009.txt,filename_23Nov2009.txt
答案 0 :(得分:34)
这里有两个问题。
<强> 1。以字符串形式获取日期
这很简单。只需将date
命令与+
选项一起使用即可。我们可以使用反引号来捕获变量中的值。
$ DATE=`date +%d-%m-%y`
您可以使用date man page上详细说明的不同%
选项更改日期格式。
<强> 2。将文件拆分为名称和扩展名。
这有点棘手。如果我们认为文件名中只有一个.
,我们可以使用cut
作为分隔符{。}}。
.
但是,这不适用于文件名中的多个$ NAME=`echo $FILE | cut -d. -f1
$ EXT=`echo $FILE | cut -d. -f2`
。如果我们使用.
- 你可能是 - 我们可以使用一些bash magic that allows us to match patterns when we do variable expansion:
bash
将它们放在一起我们得到:
$ NAME=${FILE%.*}
$ EXT=${FILE#*.}
如果我们不太担心可读性,我们会在一行(使用不同的日期格式)上完成所有工作:
$ FILE=somefile.txt
$ NAME=${FILE%.*}
$ EXT=${FILE#*.}
$ DATE=`date +%d-%m-%y`
$ NEWFILE=${NAME}_${DATE}.${EXT}
$ echo $NEWFILE
somefile_25-11-09.txt
答案 1 :(得分:29)
你可以使用反引号。
$ echo "myfilename-"`date +"%d-%m-%Y"`
收率:
myfilename-25-11-2009
答案 2 :(得分:12)
cp somefile somefile_`date +%d%b%Y`
答案 3 :(得分:0)
与您的规范完全匹配的更复杂的解决方案
echo `expr $FILENAME : '\(.*\)\.[^.]*'`_`date +%d-%m-%y`.`expr $FILENAME : '.*\.\([^.]*\)'`
其中第一个'expr'提取没有扩展名的文件名,第二个'expr'提取扩展名
答案 4 :(得分:0)
我在bash中使用此脚本:
#!/bin/bash
now=$(date +"%b%d-%Y-%H%M%S")
FILE="$1"
name="${FILE%.*}"
ext="${FILE##*.}"
cp -v $FILE $name-$now.$ext
此脚本将 filename.ext复制到filename-date.ext,还有另一个将 moves filename.ext移至filename-date.ext的文件,您可以从here。 希望您发现它们有用!
答案 5 :(得分:0)