Откат безопасный набор операций перемещения через bash - PullRequest
0 голосов
/ 28 февраля 2019

Попытка создать скрипт bash, который позволит мне переместить три файла, которые у меня есть ниже, в новые файлы.

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

Теперь единственная проблема заключается в том, что для работы одной из моих программ согласованность между файлами должна быть согласованной.Если бы только x.file было переведено в 1.file, мой стек не работал бы, так как нарушена реляционная согласованность между всеми файлами.

Есть ли способ создать функцию в bash, которая позволила бы мне последовательно выполнять весь набор ходов и был ли сбой по какой-либо причине, по умолчанию для старых файлов?

1 Ответ

0 голосов
/ 28 февраля 2019

Предполагается, что новые имена файлов в порядке вместе со старыми именами файлов.Вместо того, чтобы перемещать их по отдельности, создайте жесткие ссылки с новыми именами, а затем удалите старые ссылки.

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

В противном случае вам может потребоваться реализовать некоторую явную блокировку или (если такая вещь существует) файловую систему, которая поддерживаетсделки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...