Creating tar file and naming by current date
BashBash Problem Overview
I'm trying to create a backup script in bash, to tar the contents of a folder and move the resulting file somewhere, but I don't really know how to do it.
#!/bin/bash
name="$date +"%y-%m-%d""
tar -zcvf $name code
But the result is that the file is just named +%y-%m-%d
. How can I change the script to name the file by the date as intended?
Intended output: 2013-08-29.tar
Bash Solutions
Solution 1 - Bash
Like this:
name=$(date '+%Y-%m-%d')
tar -zcvf "$name.tar.gz" code
or even in one line:
tar -zcvf "$(date '+%Y-%m-%d').tar.gz" code
Drop -z
flag if you want .tar
instead of .tar.gz
.
Use %y
instead of %Y
if you want just 2 digits of a year (17
instead of 2017
).
$()
is used for command substitution.
Solution 2 - Bash
tar -zcvf "$(date '+%F').tar.gz" code-path
will produce full date; same as %Y-%m-%d
. (see man date
follow by /
) to search and %F
.
For example, it will generate:
2015-07-21.tar.gz
If code-path
is a directory it will compress and archive all the files in it.
Solution 3 - Bash
On BSD System you may need to use it like this:
/usr/bin/tar -czvf /home/user/backup-`(date +%y-%m-%d)`.tar.gz /some/file.txt
Solution 4 - Bash
[root@node2rhel75:~]# tar -jcf /var/log/lvm_etc_backup-(date +%F_%H-%M_%p)
.tar.bz2 /etc/lvm/; ls -lh /var/log/
tar: Removing leading `/' from member names
-rw-r--r-- 1 root root 46 Jul 13 02:57 lvm_etc_backup-2021-07-13_02-57_AM.tar.bz2
[root@node2rhel75:~]#