Cela ne fonctionne pas car la commande date
retourne une chaîne contenant des espaces.
$ date
Wed Oct 16 19:20:51 EDT 2013
Si vous voulez vraiment de tels noms de fichiers, vous devrez envelopper la chaîne entre guillemets.
$ touch "foo.backup.$(date)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:22 foo.backup.Wed Oct 16 19:22:29 EDT 2013
Je pense cependant que vous pensez probablement à ajouter une chaîne différente à ajouter. J'utilise habituellement quelque chose comme ça:
$ touch "foo.backup.$(date +%F_%R)"
$ ll foo*
-rw-rw-r-- 1 saml saml 0 Oct 16 19:25 foo.backup.2013-10-16_19:25
Voir la page de manuel pour la date pour plus de codes de formatage autour de la sortie pour la date et l'heure.
Formats supplémentaires
Si vous souhaitez prendre le contrôle total en consultant la page de manuel, procédez comme suit:
$ date +"%Y%m%d"
20131016
$ date +"%Y-%m-%d"
2013-10-16
$ date +"%Y%m%d_%H%M%S"
20131016_193655
REMARQUE: Vous pouvez utiliser date -I
ou date --iso-8601
qui produira une sortie identique à date +"%Y-%m-%d
. Ce commutateur a également la capacité de prendre un argument pour indiquer différents formats d’heure :
$ date -I=?
date: invalid argument ‘=?’ for ‘--iso-8601’
Valid arguments are:
- ‘hours’
- ‘minutes’
- ‘date’
- ‘seconds’
- ‘ns’
Try 'date --help' for more information.
Exemples:
$ date -Ihours
2019-10-25T01+0000
$ date -Iminutes
2019-10-25T01:21+0000
$ date -Iseconds
2019-10-25T01:21:33+0000
touch foo`date +%F`
fonctionne aussi très bien.csh
shell...
) au lieu de$(..)
. Les shells C ne supportent apparemment pas cette notation pour les sous-shells.date +"%Y-%m-%d"
est le même quedate -I
. Je recommanderai les formats iso de toute façon. La précision peut être spécifiée en ajoutant des heures, des minutes, des secondes ou des ns au paramètre-I
. Exempledate -Iseconds
.Cela s'étend à quelque chose comme
cp foo.txt .backup.Thu Oct 17 01:02:03 GMT 2013
. L'espace avant les accolades commence un nouveau mot.Les accolades sont en mots séparés, ils sont donc interprétés littéralement. En outre,
$((…))
est la syntaxe pour le développement arithmétique; le résultat dedate
ne ressemble en rien à une expression arithmétique. La substitution de commande utilise un seul ensemble de parenthèses:$(date)
.Plus proche. Vous auriez pu exprimer cela avec des accolades comme
cp foo.{txt,.backup.`date`}
. Il y a toujours le problème que la sortie dedate
contient des espaces, il faut donc la mettre entre guillemets. Cela fonctionnerait:ou
Le format de sortie par défaut de
date
n'est pas bien adapté à un nom de fichier et peut même ne pas fonctionner si un environnement local utilise des/
caractères dans le format de sortie par défaut. Utilisez un format de date YMD pour que l'ordre lexicographique des noms de fichiers soit l'ordre chronologique (et pour éviter toute ambiguïté entre les formats de date américain et international).la source
Si vous voulez vraiment utiliser la date prolixe, vous devez protéger le backtick. Le format avec cette date est qu’il contient des espaces, un no-no dans un shell Unix, sauf si vous les mettez entre guillemets (ou que vous leur échappez d’une autre manière).
Cependant, je préfère utiliser le format ISO le plus court:
la source
Utilisez une fonction, cela vous facilitera la vie. C'est ce que j'utilise:
la source
Comme
date
par défaut les espaces blancs dans sa sortie, votre dernière commande a échoué. Si vous aviez cité le dernier argument avec"
, cela devrait marcher. Vos autres essais ont juste une mauvaise syntaxeVoici une solution possible sans espaces:
ou
Si vous ajoutez
Pour vous
.bashrc
connecter à nouveau et laisser votre bash le relire, il vous suffit d'appelerbk file.txt
.la source
--iso-8601
commutateur, alors je mets le lien ici. Options de date GNU: --iso-8601Vous copiez un fichier dans un fichier de sauvegarde dont le nom est créé avec l'horodatage ajouté
OU:
Vous pouvez afficher le contenu du fichier en utilisant "cat" et rediriger la sortie vers un fichier de sauvegarde dont le nom est créé avec l'horodatage ajouté
Vous pouvez également utiliser plus d'options de contrôles de FORMAT selon vos besoins, par exemple:% H,% M,% S, etc.
la source
cat
redirection par-dessuscp
?Lorsque je dois sauvegarder un fichier, je le fais généralement de cette façon.
cp foo.txt foo.backup.$(date +%F).txt
ls -l
foo.txt foo.backup.2017-9-19.txt
la source
%F
format de date produit des mois à 2 chiffres etls -l
donne généralement un peu plus d'informations que les noms de fichiers.En bash, vous pouvez taper:
Qui s'étend à:
Résultant en:
Le boeuf étant
date -Is
. J'aime l'utiliser car il est facile à retenir, à taper et permet des versions courtes (comme-In
si vous êtes un maniaque de la précision).!
commence un désignateur d'événement:Et
$
est un désignateur de mot:la source
Si vous souhaitez simplement une sauvegarde du fichier ou du répertoire, alors pourquoi saisir la destination également, utilisez simplement l'extension du shell pour ajouter la date à la fin du nom de fichier de la copie.
c'est à dire
qui se traduit par
ou simplement utiliser
Ajoutez la date pour répondre à vos besoins. :)
la source