在bash中交换两个文件夹名称

时间:2010-08-11 17:29:41

标签: bash command-line

我经常要交换两个这样的文件夹:

$ mv a{,-alt-tmp}
$ mv a{-alt,}
$ mv a-alt{-tmp,}

即。文件夹“a”变为“a-alt”,“a-alt”变为“a”。是否有一些bash命令来完成这个?这两个变化之间应该有一个最小的时间差距。

我可以用

做类似的事情
$ mv a{,-old} && mv a{-new,}

但这不适用于真正的名称交换,因为之后一个文件夹有另一个名称。

2 个答案:

答案 0 :(得分:2)

理想情况下,您需要设置符号链接以便快速交换。

由于你无法硬链接目录,我想移动解决方案是唯一真正的替代方案。

答案 1 :(得分:2)

我不确定你是否可以原子地做到这一点,但是在一个小脚本或bash函数中三次调用mv之间的时间差距很小,可能足以满足大多数人的需求。例如

function altdir { mv $1 $1-alttmp; mv $1-alt $1; mv $1-alttmp $1-alt; }

小心,好像a /目录中的文件有一个打开的文件句柄,移动后句柄将指向现在位于a-alt /目录中的文件。