在linux中将日期附加到文件名

Posted

技术标签:

【中文标题】在linux中将日期附加到文件名【英文标题】:Append date to filename in linux 【发布时间】:2010-12-20 05:19:26 【问题描述】:

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

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

提前致谢。

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

【问题讨论】:

您可能希望 yyyy-mm-dd 而不是 dd-mm-yyyy 来获得按字典顺序排列的文件名,以便按时间顺序对它们进行排序。 【参考方案1】:

您可以使用backticks

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

产量:

myfilename-25-11-2009

【讨论】:

这会将日期附加到文件名 - 在问题的示例中,日期需要在文件名和扩展名之间 这对我有用:echo test > "data-csv-"`date +"%Y-%m-%d"`".txt" 或:echo test > "data-csv-"`date +"%Y-%m-%d.txt"` 请注意,您必须删除 "` 中的双引号(它们需要绕过 SOF 语法解释器才能出现,但应在您的命令中删除) 它可能无法回答完整的问题,但我花了很长时间才发现使用反引号,所以谢谢。 (正如@MehdiLAMRANI 所说,我使用它们时不带双引号。)【参考方案2】:
cp somefile somefile_`date +%d%b%Y`

【讨论】:

cp somefile somefile_$(date +%d%b%Y) #prefered【参考方案3】:

这里有两个问题。

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

【讨论】:

感谢 Dave,但我如何或在哪里运行此脚本?请原谅我是 Linux 新手。 您能否详细说明您想要做什么。所以你在一个目录中有一个文件,你想以这种方式标记日期。是每次只有一个同名文件,还是可能是多个不同名称的文件? 我仍然不清楚你想做什么。它说脚本应该更新文件名“每次你想将文件保存到特定文件夹中”。什么是将文件保存到文件夹中?它来自哪里? 如果您希望每次有人将某些内容保存到某个目录时都更改文件名,那么您需要一些文件系统监视器。看看inotify(man inotify);你应该能够以这种方式构建一些东西。 非常感谢。这有帮助【参考方案4】:

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

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

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

【讨论】:

【参考方案5】:

我在 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,你可以从here。 希望你觉得它们有用!

【讨论】:

这正是我所需要的,我喜欢带有完整示例的 GitHub 存储库!【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:

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

date 带有所需格式选项 的命令调用$() 的大括号或在反引号之间 (`…`) 在 subshel​​l 中执行,输出为然后放在原来的命令中。

$(...) 更受欢迎,因为 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 – 完整字符串格式的月份名称​​(例如:October) %b – 缩短字符串格式的月份名称​​(例如:Oct) %d – 日期(例如:28) %j – 一年中的某天(例如:301) %u – 星期几(例如:4) %A – 完整字符串格式的工作日(例如:星期四) %a – 缩短格式的工作日(例如:周四)

【讨论】:

以上是关于在linux中将日期附加到文件名的主要内容,如果未能解决你的问题,请参考以下文章

在Python中将文本附加到文件[重复]

如何在解析云代码中将文本文件附加到山魈邮件?

如何在 Robot Framework 中将数据附加到 csv 文件?

在bash中将文本附加到具有模式匹配名称的文件[重复]

在 fortran 中将写入附加到 hdf5 文件

在Python中将一些数据从txt文件附加到特定的XML标记到xml