¿Cómo crear un directorio temporal?

Resuelto Lenik asked hace 13 años • 6 respuestas

Solía ​​crear un archivo tempfile, eliminarlo y volver a crearlo como un directorio:

temp=`tempfile`
rm -f $temp
  # <breakpoint>
mkdir $temp

El problema es que, cuando se ejecuta en <breakpoint> , resulta que hay otro programa que quiere hacer lo mismo, lo que mkdir -ed en un directorio temporal con el mismo nombre provocará el fallo de este programa.

¿Cómo debería crear un directorio temporal en lugar de un archivo?

Lenik avatar Jan 08 '11 09:01 Lenik
Aceptado

Usar mktemp -d. Crea un directorio temporal con un nombre aleatorio y se asegura de que ese archivo no exista ya. Sin embargo, debes recordar eliminar el directorio después de usarlo.

moinudin avatar Jan 08 '2011 02:01 moinudin

Para una solución más sólida, uso algo como lo siguiente. De esa manera, el directorio temporal siempre se eliminará después de que salga el script.

La función de limpieza se ejecuta en la EXITseñal. Eso garantiza que siempre se llame a la función de limpieza, incluso si el script aborta en algún lugar.

#!/bin/bash    

# the directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# the temp directory used, within $DIR
# omit the -p parameter to create a temporal directory in the default location
WORK_DIR=`mktemp -d -p "$DIR"`

# check if tmp dir was created
if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
  echo "Could not create temp dir"
  exit 1
fi

# deletes the temp directory
function cleanup {      
  rm -rf "$WORK_DIR"
  echo "Deleted temp working directory $WORK_DIR"
}

# register the cleanup function to be called on the EXIT signal
trap cleanup EXIT

# implementation of script starts here
...

Directorio de scripts bash desde aquí .

Trampas de golpe .

Ortwin Angermeier avatar Jan 08 '2016 11:01 Ortwin Angermeier