$ mv old tmp && mv curr old && mv tmp curr
わずかに効率的です!
再利用可能なシェル関数にラップ:
function swap()
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE && mv "$2" "$1" && mv $TMPFILE "$2"
}
これを .bashrc に追加してください:
function swap()
{
local TMPFILE=tmp.$$
mv "$1" $TMPFILE
mv "$2" "$1"
mv $TMPFILE "$2"
}
中間 mv
の潜在的な障害を処理したい場合 操作については、Can Bal の回答を確認してください。
これも他の回答もatomicを提供しないことに注意してください Linux システムコールや一般的な Linux ファイルシステムを使用して実装することは不可能であるためです。 Darwin カーネルの場合は、exchangedata
を確認してください システムコール。
tmpfile=$(mktemp $(dirname "$file1")/XXXXXX)
mv "$file1" "$tmpfile"
mv "$file2" "$file1"
mv "$tmpfile" "$file2"