vol*_*lni 6 unix filenames swap
如何在不使用临时变量的情况下快速完成此操作?有内置功能吗?
编辑:谢谢你们的答案.看起来我需要澄清我的问题,但大多数情况下你们假设正确:有两个文件,文件名名称相反.
我希望将文件A命名为A-name.file,将文件B命名为B-name.file.
我同意,情况不会经常发生,但它只是发生在我身上,我想快速解决.
Darwin/Mac OS X有exchangedata()系统调用:
该
exchangedata()函数以原子方式交换path1和path2引用的文件的内容.也就是说,所有并发进程将看到预交换状态或后交换状态; 他们永远不会看到处于不一致状态的文件.
然而,它实际上只适用于一些专门支持它的文件系统(例如Apple的HFS和HFS +),而且我还没有在其他系统上看到任何类似的系统调用.可执行此操作的可移植方法是使用第三个临时文件名,操作不是原子操作.
这可以用小帮手完成,只需放入.bashrc,.zshrc或你的配置.
function swap() { mv $1 $1._tmp && mv $2 $1 && mv $1._tmp $2; }
Run Code Online (Sandbox Code Playgroud)
并将其用作常规功能:
$ cat a b
Alfa
Beta
$ swap a b && cat a b
Beta
Alfa
Run Code Online (Sandbox Code Playgroud)
好的,愚蠢的问题,但是为什么不能简单地做一些事情(在shell脚本中):
mv $fileA $fileA.$$
mv $fileB $fileA
mv $fileA.$$ $fileB
Run Code Online (Sandbox Code Playgroud)
是的,它当然使用了一个临时文件,但是比其他答案更简洁。