[英]Append date to filename in linux
我想在文件名(“somefile.txt”)旁邊添加日期。 例如: somefile_25-11-2009.txt 或 somefile_25Nov2009.txt 或任何類似的東西
也許腳本會在終端窗口中執行或執行某些命令。 我正在使用 Linux(Ubuntu)。
提前致謝。
哦,我差點忘了添加腳本或命令應該在每次要將文件保存到特定文件夾但仍保留以前的文件時將文件名更新為新日期。 所以最終文件夾中會有這樣的文件: filename_18Oct2009.txt , filename_9Nov2009.txt , filename_23Nov2009.txt
您可以使用backticks
。
$ echo myfilename-"`date +"%d-%m-%Y"`"
產量:
myfilename-25-11-2009
這里有兩個問題。
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
cp somefile somefile_`date +%d%b%Y`
我在 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,您可以從這里下載它們。 希望你覺得它們有用!!
完全符合您的規格的更復雜的解決方案
echo `expr $FILENAME : '\(.*\)\.[^.]*'`_`date +%d-%m-%y`.`expr $FILENAME : '.*\.\([^.]*\)'`
其中第一個“expr”提取沒有擴展名的文件名,第二個“expr”提取擴展名
您可以在subshell 中調用date
命令的文件名旁邊添加日期。
在$()
的大括號或反引號 ( `…`
) 之間調用的具有所需格式選項的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
命令帶有許多格式化選項,允許您根據需要自定義日期輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.