通过bash回滚安全的移动操作集

时间:2019-02-28 02:33:01

标签: bash file file-io

尝试创建一个bash脚本,使我可以将下面的三个文件移动到新文件中。

x.file -> 1.file
y.file -> 2.file
z.file -> 3.file 

现在唯一的问题是,要使我的程序之一正常工作,文件之间的关系一致性必须保持一致。如果仅将x.file传输到1.file,那么我的堆栈将无法工作,因为所有文件之间的关系一致性都被破坏了。

是否有一种在bash中创建函数的方法,该函数可以使我一致地进行整个移动,并且由于某种原因(默认为旧文件)会失败吗?

1 个答案:

答案 0 :(得分:1)

这假定新文件名与旧文件名一起存在是可以的。不用单独移动它们,而是使用新名称创建硬链接,然后删除旧链接。

ln x.file 1.file
ln y.file 2.file
ln z.file 3.file
rm x.file y.file z.file

这可能需要进行一些调整,具体取决于您的系统实际开始寻找{1,2,3}.file而不是{x,y,z}.file的时间。例如,如果看到1.file暗示{2,3}.file应该存在,请链接到1.file last

ln z.file 3.file
ln y.file 2.file
ln x.file 1.file
rm x.file y.file z.file

另一个想法(如果可能的话)是让程序查找仅包含{1,2,3}.file的特定目录。然后,您可以将文件移动到临时目录中,然后自动重命名该目录。

# Assuming the program looks for real/1.file, real/2.file, and real/3.file
mkdir tmp
mv x.file tmp/1.file
mv y.file tmp/2.file
mv z.file tmp/3.file
mv tmp real

否则,您可能需要实现一些显式锁定,或者(如果存在)锁定支持事务的文件系统。