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

sam*_*ami 26 linux ubuntu filenames rename append

我想在文件名旁边添加日期("somefile.txt").例如:somefile_25-11-2009.txt或somefile_25Nov2009.txt或其他任何效果

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

提前致谢.

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

Dav*_*ebb 40

这里有两个问题.

1.将日期作为字符串

这很简单.只需使用date带有该+选项的命令即可.我们可以使用反引号来捕获变量中的值.

$ DATE=`date +%d-%m-%y` 
Run Code Online (Sandbox Code Playgroud)

您可以使用日期手册页中%详细说明的不同选项更改日期格式.

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

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

$ NAME=`echo $FILE | cut -d. -f1
$ EXT=`echo $FILE | cut -d. -f2`
Run Code Online (Sandbox Code Playgroud)

但是,这不适.用于文件名中的多个.如果我们正在使用bash- 你可能是 - 我们可以使用一些bash魔法,它允许我们在进行变量扩展时匹配模式:

$ NAME=${FILE%.*}
$ EXT=${FILE#*.} 
Run Code Online (Sandbox Code Playgroud)

将它们放在一起我们得到:

$ FILE=somefile.txt             
$ NAME=${FILE%.*}
$ EXT=${FILE#*.} 
$ DATE=`date +%d-%m-%y`         
$ NEWFILE=${NAME}_${DATE}.${EXT}
$ echo $NEWFILE                 
somefile_25-11-09.txt                         
Run Code Online (Sandbox Code Playgroud)

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

$ FILE=somefile.txt  
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.}
$ echo $FILE                                 
somefile_25Nov09.txt
Run Code Online (Sandbox Code Playgroud)


mik*_*iku 34

你可以使用反引号.

$ echo "myfilename-"`date +"%d-%m-%Y"`
Run Code Online (Sandbox Code Playgroud)

产量:

myfilename-25-11-2009
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用:`echo test>"data-csv - "\`date +"%Y-%m-%d"\`".txt"` (10认同)
  • 或者:`echo test>"data-csv - "\`date +"%Y-%m-%d.txt"\`` (2认同)

Sou*_*sou 16

cp somefile somefile_`date +%d%b%Y`
Run Code Online (Sandbox Code Playgroud)

  • cp somefile somefile_$(date +%d%b%Y) #prefered (3认同)

ano*_*knr 13

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

\n

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

\n

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

\n

问题请求的解决方案

\n
$ echo somefile_$(date +%d-%m-%Y).txt\nsomefile_28-10-2021.txt\n\n$ echo somefile_$(date +%d%b%Y).txt\nsomefile_28Oct2021.txt\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
    \n
  • %D \xe2\x80\x93 以 mm/dd/yy 格式显示日期(例如:10/28/21)
  • \n
  • %Y \xe2\x80\x93 年(例如:2021 年)
  • \n
  • %m \xe2\x80\x93 月份(例如:10)
  • \n
  • %B \xe2\x80\x93 完整字符串格式的月份名称(例如:十月)
  • \n
  • %b \xe2\x80\x93 缩写字符串格式的月份名称(例如:Oct)
  • \n
  • %d \xe2\x80\x93 一个月中的第几天(例如:28)
  • \n
  • %j \xe2\x80\x93 一年中的第几天(例如:301)
  • \n
  • %u \xe2\x80\x93 星期几(例如:4)
  • \n
  • %A \xe2\x80\x93 完整字符串格式的工作日(例如:星期四)
  • \n
  • %a \xe2\x80\x93 缩写格式的工作日(例如:星期四)
  • \n
\n


tat*_*ojo 5

我在 bash 中使用这个脚本:

#!/bin/bash

now=$(date +"%b%d-%Y-%H%M%S")
FILE="$1"
name="${FILE%.*}"
ext="${FILE##*.}"

cp -v $FILE $name-$now.$ext
Run Code Online (Sandbox Code Playgroud)

该脚本将 filename.ext复制到 filename-date.ext,还有另一个脚本将 filename.ext移动到 filename-date.ext,您可以从这里下载它们。希望您发现它们有用!