J'utilise pour créer un tempfile
, le supprimer et le recréer en tant que répertoire:
tmpnam=`tempfile`
rm -f $tmpnam
mkdir "$tmpnam"
Le problème est qu'un autre processus peut avoir le même nom X
s'il exécute accidentellement le fichier temporaire après un processus rm -f X
et juste avant mkdir X
.
bash
temporary-directory
Xiè Jìléi
la source
la source
mktemp -d -t <prefix>
Pour une solution plus robuste, j'utilise quelque chose comme ce qui suit. De cette façon, le répertoire temp sera toujours supprimé après la fin du script.
La fonction de nettoyage est exécutée sur le
EXIT
signal. Cela garantit que la fonction de nettoyage est toujours appelée, même si le script abandonne quelque part.Répertoire du script bash d' ici .
Pièges à coups .
la source
cleanup
sera rm -rf votre répertoire courant!mktemp
échec,WORK_DIR
sera vide, ce qui signifie que la commande serait justerm -rf
sans argument. Je n'utilise pas FreeBSD mais je serais assez surpris s'ilrm -rf
était équivalent àrm -rf .
TMPWORKDIR=$(basename 'mktemp -d -p /tmp/git/')
puis 2rmdir /tmp/git/"${TMPWORKDIR}"
.. Si la variable est vide maintenant, vous reviendrez toujours à/tmp/git/
pas à l'ensemble du système. Considérez quelque chose comme ça dans la réponse et je serai heureux d'être d'accord. ;)Mon one-liner préféré pour cela est
la source
rm $(pwd)
? : Ppushd $(mktemp -d)
...popd
rm -r $(pwd)
rm -r $(pwd)
. Considérez la possibilité que la création de répertoire temporaire échoue pour une raison quelconque (peut-être que le système de fichiers / tmp est plein ou a été remonté en lecture seule en raison d'une erreur?); puiscd $(mktemp -d)
évaluera à cecd
qui change dans le répertoire de l'utilisateur, qui serait ensuite supprimé.if pushd $(mktemp -d || echo BADMPDIR); then ........ ; rm -r $(pwd); popd; fi
L'extrait suivant créera en toute sécurité un répertoire temporaire (
-d
) et stockera son nom dans leTMPDIR
. (Un exemple d'utilisation deTMPDIR
variable est présenté plus loin dans le code où il est utilisé pour stocker des fichiers originaux qui seront éventuellement modifiés.)La première
trap
ligne exécute laexit 1
commande lorsqu'un des signaux spécifiés est reçu. La deuxièmetrap
ligne supprime (nettoie) la$TMPDIR
sortie du programme activé (à la fois normale et anormale). Nous initialisons ces pièges après avoir vérifié qu'ils ontmkdir -d
réussi à éviter d'exécuter accidentellement le piège de sortie$TMPDIR
dans un état inconnu.la source
-d
vérifie les répertoires. 2.) La terminaison est déjà la valeur par défaut pour ces signaux.