Поэкспериментировал.
Получилось, что если имеющийся в старой сохраненке файл удалить, в rw слое появляется тень. Если после этого файл вновь создать, то сам он появляется в rw, а тень исчезает.
Посему условие под if, как мне кажется, излишнее.
А вот тень в вашем коде не удаляется, причем тут нужна еще одна проверка, ведь тот факт, что файл нашелся в старой сохраненке еще не означает, что на нижнем слое его нет, файл мог быть изменен и попасть в сохраненку, а потом уже удален путем затенения.
У вас, насколько понимаю, нижний слой один, так что проверить несложно.
Итого получается:
#Удаляем "затенённые" (отмеченные как удалённые) файлы и каталоги.
find /tmp/savesfs-root -mindepth 2 -name ".wh.*" | while read WH
do
F=${WH//.wh.}
[ -e "$F" ] && rm -r "$F" #если ранее сохранённый файл затенен, удаляем его.
[ ! -e "/путь к нижнему слою${F#/tmp/savesfs-root}" ] && rm -r "$WH" # файла нет - удаляем ненужную тень
# если .wh.* относится к нижним слоям - ничего не делаем
done
UPD. Нет, с ненужностью условия под if, я пожалуй, ошибся.
Итак. Будем рассуждать тупо. Какие ситуации c .wh. вообще возможны? Надо составить табличку.
1 2 3 4 5 6
rw .wh. file .wh. .wh. - file
ro save file .wh. - file .wh. .wh.
ro base file file file - - -
В сохраненку падают файлы со слоев rw и ro save
Действия Признаки
1) Удалить файл, оставить тень !f.rw && f.s
2) Удалить тень f.rw
3) Ничего не удалять !f.rw && !f.s
4) Удалить и файл и тень !f.rw && f.s && !f.b
5) Удалить тень !f.rw && !f.s && !f.b
6) Удалить тень f.rw
#Удаляем "затенённые" (отмеченные как удалённые) файлы и каталоги.
find /tmp/savesfs-root -mindepth 2 -name ".wh.*" | while read WH
do
FS="${WH//.wh.}" ; F="${FS#/tmp/savesfs-root}"
if [ -e "/initrd/pup_rw$F" ] ; then
rm $WH # 2,6 если удалённый файл заново создан, удаляем .wh.*
else
[ -e "$FS" ] && rm -r "$FS" # 1,4 если ранее сохранённый файл затенен, удаляем его.
[ ! -e "/путь к нижнему слою$F" ] && rm -r "$WH" # 4,5 файла нет - удаляем ненужную тень
fi # 3 если .wh.* относится к нижним слоям - ничего не делаем
done
Вот, теперь вроде правильно. Добавилось условие удаления ненужных теней.
Это я больше для себя разбираюсь с логикой работы с тенями.