Я бы воспользовался mergerfs
Есть overlayfs
, то это монтирование на уровне ядра, а mergefs
монтирует через fuse
, то есть можно пользоваться без sudo
Пример.
Подготовим файлы - каталоги src1
и src2
со случайным содержимым:
target=src1;
for i in 1 2 3; do
mkdir -p $target/b$i;
for j in `seq 9`; do
x=$RANDOM;
if [ $x -gt 16192 ]; then
echo $target > $target/b$i/file_$j.txt;
fi
done;
done;
target=src2;
for i in 1 2 3; do
mkdir -p $target/b$i;
for j in `seq 9`; do
x=$RANDOM;
if [ $x -gt 16192 ]; then
echo $target > $target/b$i/file_$j.txt;
fi
done;
done;
Это скрипт создаёт два каталога, в каждом три подкаталога, в каждом из подкаталогов несколько случайных файлов. Например, у меня это выглядит так:
ls -R src1/b* src2/b*
src1/b1:
file_2.txt file_3.txt file_4.txt file_5.txt file_8.txt file_9.txt
src1/b2:
file_2.txt file_4.txt file_5.txt file_6.txt file_7.txt file_8.txt
src1/b3:
file_2.txt file_4.txt file_6.txt file_7.txt
src2/b1:
file_1.txt file_2.txt file_4.txt file_7.txt file_8.txt
src2/b2:
file_1.txt file_3.txt file_5.txt file_6.txt file_7.txt
src2/b3:
file_1.txt file_2.txt file_3.txt file_6.txt file_7.txt file_9.txt
Теперь общий каталог
mkdir src
mergerfs ./src1:./src2 ./src
Каталог src
объединяет каталоги src1
и src2
mount | grep mergerfs
1:2 on /home/user/tmp/try-mergerfs/src type fuse.mergerfs (rw,nosuid,nodev,relatime,user_id=1000,group_id=1000)
содержимое файлов:
cat src/b1/*
src2
src1
src1
src1
src1
src2
src1
src1
По умолчанию при чтении первым берётся файл из первого каталога в списке, новые файлы создаются во втором каталоге. Но у программы mergerfs
десятки опций, можно тонко настроить что, куда и как сохранять.