Quiero un Bash one-liner que crea atómicamente un archivo si no existe. Eso significa esencialmente "si el archivo no existe, créelo", pero asegurando que nadie más logre crear el archivo en el pequeño espacio entre hacer el if y crear el archivo.
9
Respuestas:
Robar una respuesta de varios comentarios y enlaces a [SO]. Parece que hay un método compatible con POSIX que no involucra
mkdir
como mencioné en mi respuesta original a continuaciónEsta redirección al archivo devuelve 0 o falla y devuelve un valor distinto de cero si el archivo ya existe.
Respuesta original
Tendrá que usar
mkdir
: eso es atómico, o el directorio se crea y puede continuar o no se crea, por lo que debe tomar las medidas adecuadas.Por supuesto,
mkdir
no crea un archivo, pero una vez que sabe que tiene acceso exclusivo al directorio, puede crear el archivo que desee.En cuanto a un trazador de líneas, te lo dejaré a ti. Personalmente lo escribiría en unas pocas líneas, ya que será más fácil de mantener.
fuente
¿Es un archivo o directorio? Si es un archivo, puede usar el comando táctil simple: si el archivo existe, simplemente modifica el último tiempo de acceso. Si el archivo no existe, se crea.
fuente
Prueba este. El
ln
proporciona la funcionalidad de prueba y configuración.fuente
Si no le importa el nombre del archivo, puede delegar esta tarea a una utilidad, por ejemplo mktemp
Invocación:
fuente