$ mv old tmp && mv curr old && mv tmp curr
je o něco efektivnější!
Zabaleno do opakovaně použitelné funkce shellu:
function swap()
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE && mv "$2" "$1" && mv $TMPFILE "$2"
}
Přidejte toto do svého .bashrc:
function swap()
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE
mv "$2" "$1"
mv $TMPFILE "$2"
}
Pokud chcete zvládnout potenciální selhání meziproduktu mv
operace, zkontrolujte odpověď Can Bal.
Upozorňujeme, že ani tato, ani jiné odpovědi neposkytují atomový řešení, protože je nemožné takové implementovat pomocí linuxových systémových volání a/nebo populárních linuxových souborových systémů. U jádra Darwin zaškrtněte exchangedata
systémové volání.
tmpfile=$(mktemp $(dirname "$file1")/XXXXXX)
mv "$file1" "$tmpfile"
mv "$file2" "$file1"
mv "$tmpfile" "$file2"