将日期附加到Linux中的文件名

问题描述 投票:28回答:4

我想在文件名(“ somefile.txt”)旁边添加日期。例如:somefile_25-11-2009.txt或somefile_25Nov2009.txt或与此相关的任何内容

也许在终端窗口中将执行脚本或执行某些命令。我正在使用Linux(Ubuntu)。

提前感谢。

哦,我几乎忘了补充一点,每次要将文件保存到特定文件夹但仍保留以前的文件时,脚本或命令都应将文件名更新为新日期。因此,最终该文件夹中将存在这样的文件:filename_18Oct2009.txt,filename_9Nov2009.txt,filename_23Nov2009.txt

linux ubuntu append rename filenames
4个回答
41
投票

这里有两个问题。

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-您可能会使用-我们可以使用一些bash magic that allows us to match patterns when we do variable expansion

$ 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                         

而且,如果我们不太担心可读性,我们将全部工作都放在一行上(使用不同的日期格式):

$ FILE=somefile.txt  
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.}
$ echo $FILE                                 
somefile_25Nov09.txt

35
投票

您可以使用反引号。

$ echo myfilename-"`date +"%d-%m-%Y"`

收益率:

myfilename-25-11-2009

16
投票
cp somefile somefile_`date +%d%b%Y`

0
投票

更加复杂的解决方案,完全符合您的规格

echo `expr $FILENAME : '\(.*\)\.[^.]*'`_`date +%d-%m-%y`.`expr $FILENAME : '.*\.\([^.]*\)'`

其中第一个'expr'提取不带扩展名的文件名,第二个'expr'提取不带扩展名的文件

© www.soinside.com 2019 - 2024. All rights reserved.