bash - una - mover todos los archivos de un directorio a otro en linux
¿Cómo crear un directorio temporal? (3)
Mi favorito de una línea para esto es
cd $(mktemp -d)
Utilizo para crear un tempfile
, eliminarlo y volver a crearlo como un directorio:
tmpnam=`tempfile`
rm -f $tmpnam
mkdir "$tmpnam"
El problema es que otro proceso puede tener el mismo nombre X
, si accidentalmente ejecuta tempfile después de un proceso rm -f X
y justo antes de mkdir X
Para una solución más robusta, uso algo como lo siguiente. De esta forma, el directorio temporal siempre se eliminará después de que el script salga.
La función de limpieza se ejecuta en la señal de EXIT
. Eso garantiza que siempre se invoca la función de limpieza, incluso si el script se cancela en alguna parte.
#!/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 script bash desde here .
Bash traps .
Use mktemp -d
. Crea un directorio temporal con un nombre aleatorio y se asegura de que el archivo no exista. Sin embargo, debes recordar borrar el directorio después de usarlo.