Append date to filename in linux
LinuxUbuntuAppendRenameFilenamesLinux Problem Overview
I want add the date next to a filename ("somefile.txt"). For example: somefile_25-11-2009.txt or somefile_25Nov2009.txt or anything to that effect
Maybe a script will do or some command in the terminal window. I'm using Linux(Ubuntu).
Thanks in advance.
oh i almost forgot to add that the script or command should update the filename to a new date everytime you want to save the file into a specific folder but still keeping the previous files. So there would be files like this in the folder eventually: filename_18Oct2009.txt , filename_9Nov2009.txt , filename_23Nov2009.txt
Linux Solutions
Solution 1 - Linux
You can use backticks
.
$ echo myfilename-"`date +"%d-%m-%Y"`"
Yields:
myfilename-25-11-2009
Solution 2 - Linux
There's two problems here.
1. Get the date as a string
This is pretty easy. Just use the date
command with the +
option. We can use backticks to capture the value in a variable.
$ DATE=`date +%d-%m-%y`
You can change the date format by using different %
options as detailed on the [date man page][1].
2. Split a file into name and extension.
This is a bit trickier. If we think they'll be only one .
in the filename we can use cut
with .
as the delimiter.
$ NAME=`echo $FILE | cut -d. -f1
$ EXT=`echo $FILE | cut -d. -f2`
However, this won't work with multiple .
in the file name. If we're using bash
- which you probably are - we can use some [bash magic that allows us to match patterns when we do variable expansion][2]:
$ NAME=${FILE%.*}
$ EXT=${FILE#*.}
Putting them together we get:
$ FILE=somefile.txt
$ NAME=${FILE%.*}
$ EXT=${FILE#*.}
$ DATE=`date +%d-%m-%y`
$ NEWFILE=${NAME}_${DATE}.${EXT}
$ echo $NEWFILE
somefile_25-11-09.txt
And if we're less worried about readability we do all the work on one line (with a different date format):
$ FILE=somefile.txt
$ FILE=${FILE%.*}_`date +%d%b%y`.${FILE#*.}
$ echo $FILE
somefile_25Nov09.txt
[1]: http://unixhelp.ed.ac.uk/CGI/man-cgi?date "date man page" [2]: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion "bash Manual"
Solution 3 - Linux
cp somefile somefile_`date +%d%b%Y`
Solution 4 - Linux
You can add date next to a filename invoking date
command in subshell.
date
command with required formatting options invoked the braces of $()
or between the backticks (`…`
) is executed in a subshell and the output is then placed in the original command.
The $(...)
is more preferred since in can be nested. So you can use command substitution inside another substitution.
Solutions for requests in questions
$ echo somefile_$(date +%d-%m-%Y).txt
somefile_28-10-2021.txt
$ echo somefile_$(date +%d%b%Y).txt
somefile_28Oct2021.txt
The date
command comes with many formatting options that allow you to customize the date output according to the requirement.
-
%D – Display date in the format mm/dd/yy (e.g. : 10/28/21)
-
%Y – Year (e.g. : 2021)
-
%m – Month (e.g. : 10)
-
%B – Month name in the full string format (e.g. : October)
-
%b – Month name in the shortened string format (e.g. : Oct)
-
%d – Day of month (e.g. : 28)
-
%j – Day of year (e.g. : 301)
-
%u – Day of the week (e.g. : 4)
-
%A – Weekday in full string format (e.g. : Thursday)
-
%a – Weekday in shortened format (e.g. : Thu)
Solution 5 - Linux
I use this script in bash:
#!/bin/bash
now=$(date +"%b%d-%Y-%H%M%S")
FILE="$1"
name="${FILE%.*}"
ext="${FILE##*.}"
cp -v $FILE $name-$now.$ext
This script copies filename.ext to filename-date.ext, there is another that moves filename.ext to filename-date.ext, you can download them from here. Hope you find them useful!!
Solution 6 - Linux
I use it in raspberry pi, and the first answer doesn't work for me, maybe because I typed wrong or something? I don't know. So I combined the above answers and came up with this:
now=$(date +'%Y-%m-%d')
geany "OptionalName-${now}.txt"
That if you want to use geany or anything else
Solution 7 - Linux
a bit more convoluted solution that fully matches your spec
echo `expr $FILENAME : '\(.*\)\.[^.]*'`_`date +%d-%m-%y`.`expr $FILENAME : '.*\.\([^.]*\)'`
where first 'expr' extracts file name without extension, second 'expr' extracts extension