60

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

Benjamin W.
  • 46,058
  • 19
  • 106
  • 116
Anonymous Entity
  • 3,254
  • 3
  • 27
  • 41
  • Possible duplicate of [Append date to filename in linux](https://stackoverflow.com/q/1795678/608639), [Appending a current date from a variable to a filename](https://unix.stackexchange.com/q/57590), [Adding timestamp to a filename with mv in BASH](https://stackoverflow.com/q/8228047/608639), etc. – jww Oct 15 '19 at 08:25

4 Answers4

118

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.

Aleks-Daniel Jakimenko-A.
  • 10,335
  • 3
  • 41
  • 39
  • Why not .tar.gz for the output file? – SMTF Mar 22 '15 at 16:22
  • 1
    **Add date&time&timezone:** `tar -zcf "yourzipname_$(date '+%Y-%m-%d_%H-%M-%S%z(%Z)').tar.gz" your_source_folder` will create zip including 24-hour format for example like `yourzipname_2021-01-25_21-29-14+0000(UTC).tar.gz` – jave.web Jan 28 '21 at 19:30
10
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.

Gianfranco P.
  • 10,049
  • 6
  • 51
  • 68
1

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
Kyle Coots
  • 2,041
  • 1
  • 18
  • 24
-2

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