Я пытаюсь запустить резервную копию всех моих .x-папок в Home для сохранения конфигураций.
С помощью программы, которую я пишу, вы можете выбрать любые папки, которые вы хотите включить или исключить из
Я пытаюсь создать что-то вроде этого:
rsync -aP --exclude $Home/.cache/google-chrome/Default/Cache/* --exclude $Home/.cache/google-chrome/Default/Media\ Cache/* --exclude $Home/.wine $HOME/.* /mnt/ext/
Итак, в приведенном выше примере все копируется на внешний диск, за исключением Wine и кеши Chrome. Я знаю, что я могу создать текстовый файл и сказать rsync --exclude-from 'textfile', но мне больше не нужно читать и переписывать текстовый файл.
Мое беспокойство заключается в том, что, поскольку это расширяется, список исключений может получится довольно долго, так как мой проект в конечном итоге начнет включать папки за пределами $ HOME, а также на другие системы NFS. Я могу запустить эту команду и использовать список исключений в переменной:
exlist = "--exclude $Home/.cache/google-chrome/Default/Cache/* --exclude $Home/.cache/google-chrome/Default/Media\ Cache/* --exclude $Home/.wine" etc etc
subprocess.Popen("rsync -options ",exlist," /source /dest")
Но это вызовет проблемы с чрезвычайно длинными командами оболочки, где мне придется разбить его на более мелкие куски? Я предпочел бы опережать потенциальные будущие проблемы и начинать писать обработчики, чтобы выполнить это сейчас, вместо того, чтобы пытаться исправить и исправить его позже.
Просто выполните:
with contextlib.closing(tempfile.NamedTemporaryFile()) as exclude_from:
print(*your_exclude_list, sep="\n", flush=True, file=exclude_from) # etc
subprocess.check_call(['rsync', '--exclude-from', exclude_from.name, ...])
... и не беспокойтесь о временном файле. Я ценю, что временные файлы кажутся беспорядочными, но с библиотекой Python и менеджерами контекста все это может быть красиво завернуто в посылку с луком, поэтому вам не нужно беспокоиться об этом.