尝试创建一个bash脚本,使我可以将下面的三个文件移动到新文件中。
x.file -> 1.file
y.file -> 2.file
z.file -> 3.file
现在唯一的问题是,要使我的程序之一正常工作,文件之间的关系一致性必须保持一致。如果仅将x.file
传输到1.file
,那么我的堆栈将无法工作,因为所有文件之间的关系一致性都被破坏了。
是否有一种在bash中创建函数的方法,该函数可以使我一致地进行整个移动,并且由于某种原因(默认为旧文件)会失败吗?
答案 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
否则,您可能需要实现一些显式锁定,或者(如果存在)锁定支持事务的文件系统。