$ mv old tmp && mv curr old && mv tmp curr
est légèrement plus efficace !
Enveloppé dans une fonction shell réutilisable :
function swap()
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE && mv "$2" "$1" && mv $TMPFILE "$2"
}
Ajoutez ceci à votre .bashrc :
function swap()
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE
mv "$2" "$1"
mv $TMPFILE "$2"
}
Si vous souhaitez gérer l'échec potentiel de l'intermédiaire mv
opérations, vérifiez la réponse de Can Bal.
Veuillez noter que ni ceci, ni d'autres réponses ne fournissent une réponse atomique solution, car il est impossible de l'implémenter en utilisant des appels système Linux et/ou des systèmes de fichiers Linux populaires. Pour le noyau Darwin, cochez exchangedata
appel système.
tmpfile=$(mktemp $(dirname "$file1")/XXXXXX)
mv "$file1" "$tmpfile"
mv "$file2" "$file1"
mv "$tmpfile" "$file2"