Un moyen légèrement plus portable de gérer les fichiers temporaires consiste à utiliser mktemp
. Cela créera des fichiers temporaires et vous renverra les chemins. Par exemple:
$ mktemp
/tmp/tmp.zVNygt4o7P
$ ls /tmp/tmp.zVNygt4o7P
/tmp/tmp.zVNygt4o7P
Vous pouvez l'utiliser facilement dans un script:
tmpfile=$(mktemp)
echo "Some temp. data..." > $tmpfile
rm $tmpfile
En lisant la page de manuel, vous devriez pouvoir définir les options en fonction de vos besoins. Par exemple:
-d
crée un répertoire au lieu d'un fichier.
-u
génère un nom, mais ne crée rien.
En utilisant -u
vous pourriez récupérer le répertoire temporaire assez facilement avec ...
$ tmpdir=$(dirname $(mktemp -u))
Plus d'informations sur mktemp
sont disponibles ici .
Modification concernant Mac OS X: Je n’ai jamais utilisé de système Mac OSX, mais selon un commentaire de Tyilo ci-dessous, il semble que celui-ci mktemp
nécessite que vous fournissiez un modèle (qui est un argument optionnel sous Linux). Citant:
Le modèle peut être n'importe quel nom de fichier avec un certain nombre de "X", par exemple /tmp/temp.XXXX
. Les "X" suivants sont remplacés par le numéro de processus actuel et / ou une combinaison de lettres unique. Le nombre de noms de fichiers uniques que mktemp peut renvoyer dépend du nombre de "X" fournis; Avec six "X", mktemp sélectionnera l'un des 56800235584 (62 ** 6) noms de fichiers possibles.
La page de manuel indique également que cette implémentation est inspirée de la page de manuel OpenBSD mktemp
. Une divergence similaire pourrait donc être observée par les utilisateurs OpenBSD et FreeBSD (voir la section Historique ).
Maintenant, comme vous l'avez probablement remarqué, cela nécessite que vous spécifiiez un chemin d'accès complet au fichier, y compris le répertoire temporaire que vous recherchez dans votre question. Ce petit problème peut être traité à l'aide du -t
commutateur. Bien que cette option semble nécessiter un argument ( prefix
), il semblerait que mktemp
cela dépende $TMPDIR
lorsque cela est nécessaire.
Globalement, vous devriez pouvoir obtenir le même résultat que ci-dessus en utilisant ...
$ tmpdir=$(dirname $(mktemp tmp.XXXXXXXXXX -ut))
Toute réaction des utilisateurs de Mac OS X serait grandement appréciée, car je suis incapable de tester cette solution moi-même.
${TMPDIR-/tmp}
sur les goûts Unix.TMPDIR
Existe-t-il (de la part du système ou de l'administrateur ou de l'utilisateur) de vous dire quand ne pas utiliser/tmp
les fichiers temporaires?