56

我想在文件名(“somefile.txt”)旁边添加日期。例如:somefile_25-11-2009.txt 或 somefile_25Nov2009.txt 或任何类似的东西

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

提前致谢。

哦,我几乎忘了添加脚本或命令应该在每次您想将文件保存到特定文件夹但仍保留以前的文件时将文件名更新为新日期。所以文件夹中最终会有这样的文件: filename_18Oct2009.txt , filename_9Nov2009.txt , filename_23Nov2009.txt

4

7 回答 7

75

您可以使用backticks.

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

产量:

myfilename-25-11-2009
于 2009-11-25T09:27:26.787 回答
49

这里有两个问题。

1. 以字符串形式获取日期

这很容易。只需使用date带有+选项的命令。我们可以使用反引号来捕获变量中的值。

$ DATE=`date +%d-%m-%y` 

您可以使用日期手册页%中详述的不同选项来更改日期格式。

2. 将文件拆分为名称和扩展名。

这有点棘手。如果我们认为它们只是.文件名中的一个,我们可以将cut.用作分隔符。

$ NAME=`echo $FILE | cut -d. -f1
$ EXT=`echo $FILE | cut -d. -f2`

但是,这不适.用于文件名中的多个。如果我们正在使用bash- 你可能是 - 我们可以使用一些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                         

如果我们不太担心可读性,我们会在一行上完成所有工作(使用不同的日期格式):

$ FILE=somefile.txt  
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.}
$ echo $FILE                                 
somefile_25Nov09.txt
于 2009-11-25T09:30:15.113 回答
24
cp somefile somefile_`date +%d%b%Y`
于 2009-11-25T09:29:03.910 回答
3

我在 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,还有另一个将 filename.ext移动到 filename-date.ext,您可以从这里下载它们。希望你觉得它们有用!!

于 2020-09-22T21:59:31.657 回答
2

我在树莓派中使用它,第一个答案对我不起作用,可能是因为我输入错误或什么?我不知道。所以我结合了上面的答案并想出了这个:

now=$(date +'%Y-%m-%d')
geany "OptionalName-${now}.txt"

如果你想使用 geany 或其他任何东西

在此处输入图像描述 在此处输入图像描述

于 2021-06-16T03:37:52.033 回答
1

您可以在subshel​​ldate中的文件名调用命令旁边添加日期。

date调用带有所需格式选项$()的命令反引号 ( `…`)的大括号或之间的命令在子 shell中执行,然后将输出放置在原始命令中。

更优选,$(...)因为 in 可以嵌套。因此,您可以在另一个替换中使用命令替换。

问题请求的解决方案

$ echo somefile_$(date +%d-%m-%Y).txt
somefile_28-10-2021.txt

$ echo somefile_$(date +%d%b%Y).txt
somefile_28Oct2021.txt

date命令带有许多格式选项,允许您根据要求自定义日期输出。

  • %D – 以 mm/dd/yy 格式显示日期(例如:10/28/21)
  • %Y – 年(例如:2021)
  • %m – 月(例如:10)
  • %B – 完整字符串格式的月份名称(例如:十月)
  • %b – 缩短字符串格式的月份名称(例如:Oct)
  • %d – 日期(例如:28)
  • %j – 一年中的某一天(例如:301)
  • %u – 星期几(例如:4)
  • %A – 完整字符串格式的工作日(例如:星期四)
  • %a – 缩短格式的工作日(例如:周四)
于 2021-10-28T04:08:19.433 回答
0

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

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

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

于 2009-11-25T09:39:17.533 回答