Je peux créer un nouveau fichier et y mettre la date.
touch example.txt
date >> example.txt
Mais je dois créer le fichier avec la date à partir du moment où j'ai créé le nouveau fichier. Comment puis-je faire cela avec une seule commande?
Utilisez simplement la commande date pour rediriger vers un fichier et celui-ci sera créé:
date > example.txt
Une méthode préférée utiliserait l'opérateur >>
append:
date >> example.txt
L'opérateur de redirection (>
) et l'opérateur d'ajout (>>
) créeront le fichier cible s'il n'existe pas. Vous n'avez jamais besoin de le créer d'abord et d'écrire plus tard.
Il convient de noter que, si le problème avec
Je dois créer le fichier avec la date au moment où j'ai créé le nouveau fichier
est dû à des situations de concurrence (par exemple, un processus analyse périodiquement un fichier portant ce nom et s'attend à y trouver une date), même en le faisant
date > example.txt
n'est pas correct, car il y a encore une très petite fenêtre entre le moment où le shell ouvre le fichier et le moment où date
écrit ses éléments (qui peuvent également être écrits de manière non atomique).
Dans ce cas, la solution consiste à écrire dans un fichier séparé , puis à effectuer un mv
sur le nom de fichier correct:
date > example.txt.tmp
mv example.txt.tmp example.txt
Un déplacement sur le même système de fichiers est garanti comme étant atomique. Ainsi, lorsque example.txt
apparaît, il contient déjà le contenu attendu.
Si au contraire, la question est simplement de taper une seule commande, la solution originale est bien sûr la solution la plus simple et la plus simple.