2013-08-28 5 views
27

J'essaie de créer un script de sauvegarde dans bash, pour tasser le contenu d'un dossier et déplacer le fichier résultant quelque part, mais je ne sais pas vraiment comment le faire.Créer un fichier tar et nommer par date actuelle

#!/bin/bash 
name="$date +"%y-%m-%d"" 
tar -zcvf $name code 

Mais le résultat est que le fichier est vient d'être nommé +%y-%m-%d. Comment puis-je changer le script pour nommer le fichier par la date comme prévu?

sortie prévue: 2013-08-29.tar

Répondre

56

Comme ceci:

name=$(date '+%Y-%m-%d') 
tar -zcvf "$name.tar.gz" code 

ou même en une ligne:

tar -zcvf "$(date '+%Y-%m-%d').tar.gz" code 

Goutte -z drapeau si vous voulez .tar au lieu de .tar.gz.

Utilisation %y au lieu de %Y si vous voulez seulement deux chiffres d'une année (17 au lieu de 2017).

$() est utilisé pour command substitution.

+0

Pourquoi ne pas tar.gz pour le fichier de sortie? – SMTF

4
tar -zcvf "$(date '+%F').tar.gz" code-path 

produira une date complète; Identique à %Y-%m-%d. (voir man date suivi de /) pour rechercher et %F.

Par exemple, il va générer:

2015-07-21.tar.gz 

Si code-path est un répertoire, il va compresser et archiver tous les fichiers qu'il contient.

0

Le système BSD vous devrez peut-être utiliser comme ceci:

/usr/bin/tar -czvf /home/user/backup-`(date +%y-%m-%d)`.tar.gz /some/file.txt 
Questions connexes