Результирующий целевой каталог Rsync кажется слишком большим

Есть две проблемы:

  1. Использование $@без кавычек.

    Это заставит цикл перебирать vlcи video.mp4как два отдельных элемента, даже если они находятся в одной и той же строке в кавычках при вызове скрипта.

  2. Использование команды в переменной.

    Если команда представляет собой нечто более сложное, чем одна простая команда, то это не сработает. Вместо этого вам нужно будет evalуказать данную строку.

Принимая это во внимание, ваш скрипт может выглядеть так

#!/bin/sh

for cmd do  # or:  for cmd in "$@"; do
    eval "$cmd" 2>/dev/null
done

Вызов этого как

./script 'echo "hello world"' 'vim "$HOME/.profile"' 'tr a-z A-Z <"$HOME/.profile" | grep -c EXPORT'

сначала запустит echo "hello world", а когда это завершится, откроется vimдля редактирования именованного файла в этой второй команде. Последняя команда более сложная, но обрабатывается тем фактом, что мы используем eval(, она просто изменяет все буквы алфавита на прописные и подсчитывает, сколько раз строка EXPORTвстречается в файле ). Он запускается сразу после завершения сеанса vim.

С этим можно даже сделать

./script 'd=$HOME' 'ls "$d"'

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

0
04.05.2020, 09:36
4 ответа

Спасибо всем за помощь. Я решил отформатировать внешний диск как XFS, который совпадает с исходным диском. И это сработало! Я могу подтвердить размер первой и последующих резервных копий (черезdu -h -d1)как:

117G   ./Apps-2020-05-04T14-19-42
3.5G   ./Apps-2020-05-04T15-07-12
121G   .
0
28.04.2021, 23:16

Прежде чем выполнять rsync, для инкрементной я делаю cp -al, который дает точку отсчета для rsync. cp -al (архив с жесткой ссылкой вместо копирования ). Исходный файл останется до тех пор, пока у вас есть одна или несколько жестких ссылок, указывающих на него.

напр. cp -al lastbkup newbackup затем выполните rsync для новой резервной копии

0
28.04.2021, 23:16

Я бы сказал, что ваше решение, вероятно, делает то, что должно.

Есть некоторые проблемы с кодом -вы должны заключать все свои переменные в двойные -кавычки, например ln -s "$TARGETDIR/$USER-$TIMESTAMP" "$TARGETDIR/$USER-Current". И, насколько я вижу, вы заново изобрели rsnapshot.

Я думаю, что путаница происходит из-за жестких ссылок на файлы. Жесткая ссылка не только создаст впечатление, что файл находится в каталоге, но во всех смыслах и целях он является в этом каталоге. Каждая из ваших резервных копий будет казаться копией всего набора резервных копий, но при более внимательном рассмотрении вы увидите, что файлы, которые не изменяются между наборами резервных копий, используют только один экземпляр хранилища. Если у вас есть резервная копия размером 100 ГБ, и 90 % остаются неизменными, вы можете получить два набора резервных копий, занимающих между собой всего 110 ГБ -, но каждый из них использует 100 ГБ при отдельном измерении.

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

Пример

# The same file, linked
ls -l top/dir?/*
-rwxrwx---+ 2 roaima roaima 1690442768 May  2 17:56 top/dir1/file.mp4
-rwxrwx---+ 2 roaima roaima 1690442768 May  2 17:56 top/dir2/file.mp4

# First directory
du -hs top/dir1
1.6G    top/dir1

# Second directory
du -hs top/dir2
1.6G    top/dir2

# Both directories, but each file is counted only once
du -hs top/dir?
1.6G    top/dir1
0       top/dir2

# All directories, but each file is counted only once
du -hs top
1.6G    top

В вашем случае попробуйте это

du -hs "$TARGETDIR"/*
2
28.04.2021, 23:16

Возникают проблемы с rsyncing в NTFS -3g, поскольку по умолчанию права доступа к файлам обычно преобразуются в 777 (rwx для всех ). Так что, возможно, когда вы копируете файл A, скажем, с разрешениями 644, первая копия становится 777 A. Более поздние копии не могут ссылаться на это, поскольку исходный файл по-прежнему имеет 644 A, даже если вторая копия имеет 777 A. rsync должен сравните исходные разрешения со ссылкой -dest и найдите несоответствие.

Один из вариантов — заменить -a, который включает сохранение пользователя, группы и разрешений, на -rlt.

В качестве альтернативы можно смонтировать файловую систему с дополнительной опцией permissions, (или использовать файл )пользовательской карты linux для окна -, который сохраняет разрешения Posix.

0
28.04.2021, 23:16

Теги

Похожие вопросы