Я предполагаю, что хранить копии всех файлов на вашем ноутбуке не вариант. Иначе было бы намного проще.
Правильный инструмент здесь - инструмент контроля версий. Но я понимаю, что если у всех пользователей нет минимального технического уровня, заставить их использовать инструменты контроля версий нереально. И даже тогда вам придется тщательно выбирать то, что вы проверяете на своем ноутбуке.
Вы все еще можете использовать контроль версий. На общей машине проверьте все свои файлы и оставьте файлы других людей в покое. Держите отдельную проверку на вашем ноутбуке. Фиксируйте и проверяйте всякий раз, когда вы переключаете машины. Чем больше я об этом думаю, тем больше мне нравится эта опция: она не требует никакого кодирования или даже хрупкого скриптинга.
Вы делаете двустороннюю синхронизацию. Rsync не очень хорош в этом: если вы забудете запустить его или случайно запустите его в неправильном направлении, вы, скорее всего, потеряете работу без предупреждения. Unison - хороший инструмент для двусторонней синхронизации: он всегда синхронизируется в двух направлениях и жалуется, если файл изменился с обеих сторон. Он с открытым исходным кодом и хорошо интегрирован как в платформы Unix, так и в Windows.
К сожалению, у unison нет возможности игнорировать файлы владельцем, равно как и rsync. Вы можете сгенерировать список игнорирования с помощью команды find -user
, но он становится беспорядочным и возникает условие гонки, если кто-то добавляет или удаляет файлы между выполнением find
и выполнением unison
или rsync
.
Вы можете установить исправление rsync или unison, чтобы добавить возможность игнорировать файлы на основе их метаданных. Я просто быстро взглянул на источник, и в обоих случаях код исключения сильно привязан к строкам, а не к записям каталога. Это выглядит выполнимо, но это не тривиальный патч.
Вы можете создать представление файловой системы, которая содержит только ваши файлы. У меня нет законченного, цельного решения, но вот пара идей для начала.
Если общий компьютер поддерживает жесткие ссылки (все блоки поддерживают, и Windows поддерживает начиная с NT4, если вы используете NTFS), достаточно легко создать копию хранилища, содержащую только жесткие ссылки ваших файлов:
cd /shared/repository
find . -user "$USER" -exec sh -c 'mkdir -p "/my/view/${0%/*}" &&
ln "$0" "/my/view/$0"' {} \;
или с зш:
autoload zmv
zmv -L -Q '/shared/repository/(**/)(*)(u$UID)' "/my/view/$1$2"
Вы должны быть осторожны, чтобы не нарушать жесткие ссылки при редактировании или синхронизации. Я не знаю, как справится rsync и unison. После первоначального создания файл в общем хранилище, которым вы владеете и который имеет количество ссылок 1, должен быть удален, а файл в вашем представлении со счетчиком ссылок 1 должен быть связан в общем хранилище. Это все довольно неуклюже, и я бы приветствовал предложения по улучшению.
Если общий компьютер поддерживает FUSE, вы можете использовать его для создания живого представления общего репозитория, содержащего только ваши файлы. Я не знаю ни одной существующей файловой системы FUSE, которая могла бы это сделать, но bindfs подходит близко (я не смотрел код, чтобы оценить сложность кодирования).
Вы можете использовать LD_PRELOAD
для переопределения readdir
(или аналога Windows) при запуске rsync или unison, чтобы он возвращал только файлы, принадлежащие вам.