Creating tar file and naming by current date

Bash

Bash 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:~]#

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnonymous EntityView Question on Stackoverflow
Solution 1 - BashAleks-Daniel Jakimenko-A.View Answer on Stackoverflow
Solution 2 - BashGianfranco P.View Answer on Stackoverflow
Solution 3 - BashKyle CootsView Answer on Stackoverflow
Solution 4 - BashlinuxstudentView Answer on Stackoverflow