Sous Linux, comment créer un fichier avec un nom qui est la date et l'heure actuelles

12

Je veux créer un fichier dont le nom sera une date et une heure actuelles. Je peux créer un fichier avec la touchcommande. Je peux également obtenir l'heure actuelle avec la datecommande. Donc, je pense que je dois en quelque sorte diriger la deuxième commande vers la première. Comment puis je faire ça?

Der Hochstapler
la source

Réponses:

19

Utilisez la valeur de retour d'une expression shell comme argument pour touch:

touch $( date '+%Y-%m-%d_%H-%M-%S' )

Résultat: un fichier nommé par exemple 2012-03-11_14-33-53.

Cette réponse suppose que vous utilisez bash(cela est décrit dans la mansection page Substitution de commandes ), mais les autres shells fonctionneront de la même manière ou seulement légèrement différemment.

Daniel Beck
la source
@MdGao Et décrit dans la même section de la page de manuel. Je préfère cependant la réponse que j'ai donnée, voici quelques raisons
Daniel Beck
J'ai supprimé mon commentaire car Markdown a brisé les contre-coups. merci pour le lien @DanielBeck
Mengdi Gao
2
@gasan Entourez-le simplement de "guillemets. Vous pouvez imaginer la sortie de dateremplacer cette partie de la ligne de commande, et touch Sun Mar 11 14:48:31 CET 2012créerez noms de fichiers Sun, Maretc. touch "Sun Mar 11 14:48:31 CET 2012"d'autre part fonctionne très bien (sauf que je ne suis pas sûr à quel point les colons travailleront).
Daniel Beck
2
@gasan Les guillemets simples ne fonctionneront pas car ils ne permettent pas la substitution de commandes ou toute autre interprétation. Voir citation dans le manuel Bash.
slhck
2
@gasan La différence est que le contenu des guillemets simples n'est pas évalué. Essayez-le avec echo "$HOME"et echo '$HOME'. C'est pourquoi j'ai suggéré l'utilisation de ".
Daniel Beck
0

Vous pouvez utiliser une commande plus simple

touch $(date | tr ' ' '-')
Omar Mardini
la source
Un peu moins élégant et sans doute moins portable, mais ça marchera aussi.
Scott
D'accord, puisque je sais que vous lisez ceci, je vais entrer dans les détails: la réponse de Daniel donne un résultat dans un format connu et totalement contrôlé. (1) La sortie de dateindique généralement l'heure en hh: mm: ss. Votre réponse se traduit par des noms de fichiers contenant des deux-points. Cela pourrait provoquer une erreur sur les systèmes de fichiers Windows. (2) La sortie brute d'une simple invocation de datedépend des paramètres régionaux; c'est-à-dire personnalisé selon la langue locale. Essayez LANG=de_DE dateet LANG=fr_FR datevoir des exemples. … (Suite)
Scott
(Suite)… (2a) Par conséquent, dans le cas (peu probable?) Où vous changez la langue de votre système ou donnez votre script et une collection de fichiers de données de votre système à quelqu'un dont le système est configuré pour un langue différente, il y aura un décalage. (Je ne suis pas sûr que ce serait un vrai problème, mais ce serait un problème esthétique.) (2b) Je ne connais aucun lieu qui le fasse, mais il pourrait théoriquement y avoir un lieu où dateécrit la date comme mm / jj / aa (ou jj / mm / aa). … (Suite)
Scott
(Suite)… Si vous rencontriez un tel système, vous auriez des noms de fichiers contenant des barres obliques, ce qui entraînerait des erreurs. (3) La réponse de Daniel donne un résultat où l'ordre lexicographique (c'est-à-dire alphabétique), tel que produit par lsou *, correspond à l'ordre chronologique. Avec votre réponse, tous les Frifichiers seront au début de toute liste triée lexicographiquement Apret Augapparaîtront avant tous les autres mois.
Scott