通过 bash 回滚安全的移动操作集
Rollback safe set of move operations through bash
尝试创建一个 bash 脚本,让我将下面的三个文件移动到新文件中。
x.file -> 1.file
y.file -> 2.file
z.file -> 3.file
现在唯一的问题是,要让我的一个程序正常工作,文件之间的关系一致性需要保持一致。如果只有 x.file
被转移到 1.file
,我的堆栈将无法工作,因为所有文件之间的关系一致性被破坏了。
有没有一种方法可以在 bash 中创建一个函数,使我能够始终如一地执行整套动作,并且无论出于何种原因都会失败,默认为旧文件?
这假设新文件名可以与旧文件名并存。不要单独移动它们,而是使用新名称创建硬 links,然后删除旧的 links。
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
应该存在,则将 link 设为 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
否则,您可能需要实现一些显式锁定,或者(如果存在这样的事情)支持事务的文件系统。
尝试创建一个 bash 脚本,让我将下面的三个文件移动到新文件中。
x.file -> 1.file
y.file -> 2.file
z.file -> 3.file
现在唯一的问题是,要让我的一个程序正常工作,文件之间的关系一致性需要保持一致。如果只有 x.file
被转移到 1.file
,我的堆栈将无法工作,因为所有文件之间的关系一致性被破坏了。
有没有一种方法可以在 bash 中创建一个函数,使我能够始终如一地执行整套动作,并且无论出于何种原因都会失败,默认为旧文件?
这假设新文件名可以与旧文件名并存。不要单独移动它们,而是使用新名称创建硬 links,然后删除旧的 links。
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
应该存在,则将 link 设为 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
否则,您可能需要实现一些显式锁定,或者(如果存在这样的事情)支持事务的文件系统。