Сохранить права доступа к файлам и символические ссылки в архиве с 7 -Zip

;в конце команды, выполняемой от findдо -exec, необходимо заключать в кавычки, чтобы защитить ее от оболочки. В противном случае оболочка увидит его как конец команды find.

Изменить

find /var/production-backup/ -mtime +7 -exec rm -rf {} ;

-

find /var/production-backup/ -mtime +7 -exec rm -rf {} ';'

или на

find /var/production-backup/ -mtime +7 -exec rm -rf {} \;

или просто

find /var/production-backup/ -mtime +7 -delete

, если ваш findподдерживает это.

Также обратите внимание, что ваша команда findне делает различий между каталогами, файлами или другими вещами в /var/production-backup. Если, например, сам каталог /var/production-backupне изменялся более семи дней (, потому что в нем не было создано/удалено файлов или каталогов ), то вся эта файловая иерархия будет удалена.

Если вы собираетесь удалять только обычные файлы, используйте

find /var/production-backup/ -type f -mtime +7 -delete

Связанные:


Другие примечания к вашему коду:

Если да

TAR=$(which tar)

и более позднее использование

$TAR...

для создания tarархива,тогда вы можете также использовать tarнапрямую. Нет смысла устанавливать TARна путь к двоичному файлу tarс which, так как это приведет к поиску PATHточно так же, как использование tarнапрямую. То же самое касается и других команд, которые вы храните в переменных.

Проверка [ `$MKDIR -p "$PRODBACKDIR"` ]должна быть проверкой непосредственно состояния возврата mkdir. Утилита mkdirне выдает вывод, который можно протестировать. Вам также не нужно проверять наличие каталога перед использованиемmkdir -p:

if mkdir -p "$PRODBACKDIR"; then
    echo 'Directory Created for site'
fi

Также обратите внимание, что вы используете {$PRODBACKDIR}, что добавит {и }к пути к каталогу. Поскольку это делается в бесполезном тесте каталога, никакого вреда не было (тест всегда терпел неудачу ). Вам также не нужно echo -eздесь.

Вам не нужно {}вокруг имен переменных в расширениях переменных. Единственное место, где вам нужно написать ${variable}, — это когда расширение является частью строки, где следующий за ним символ является допустимым символом в имени переменной, как в "${variable}x". Однако вам нужно заключать в двойные кавычки все раскрытия переменных.

Параметр --progressдля rsyncзаписывается с двумя дефисами, а не с одним. Кроме того, -e ssh, насколько мне известно, используется по умолчанию для rsyncс давних пор.

Линия

FILENAME=$(echo $DOC | awk -F '/' '{print $NF}');

может быть записано с использованием стандартной замены параметра как

FILENAME=${DOC##*/}

Вам очень редко приходится тестировать против $?. Например, вместо

tar...
if [ $? -eq 0 ]; then...

сделать

if tar...; then...

Также рассмотрите возможность использования printfдля вывода переменных данных.

Вы определяете TODAY_DATEкак строку, содержащую сегодняшнюю дату, но используете ее только дважды. Однако есть как минимум три других вызова dateс немного другим форматом... (также, %Y-%m-%dможно заменить на %F, см.man strftime).

Вам не нужно ;в конце команд, за которыми сразу не следуют другие команды в той же строке. Новая строка работает как терминатор команды.

И т. д.,...

Я бы также посоветовал изучить существующее программное обеспечение для резервного копирования. Я мог бы порекомендовать, например, borgbackupи restic.

Связанные:

0
25.07.2020, 14:20
2 ответа

Судя по этим сообщениям об ошибках, это ограничение 7 -Zip:

Пока я буду использовать tar -xzf test.tgzдля извлечения файлов.

0
18.03.2021, 23:17

На справочной странице 7z упоминается, что для систем Unix разрешения не сохраняются в 7 -Zip:

Backup and limitations DO NOT USE the 7-zip format for backup purpose on Linux/Unix because : - 7-zip does not store the owner/group of the file. On Linux/Unix, in order to backup directories you must use tar :

  • to backup a directory : tar cf - directory | 7za a -si directory.tar.7z
  • to restore your backup : 7za x -so directory.tar.7z | tar xf -

If you want to send files and directories (not the owner of file) to others Unix/MacOS/Windows users, you can use the 7-zip format.

example : 7za a directory.7z directory

Do not use "-r" because this flag does not do what you think.

Do not use directory/* because of "." files (example : "directory/" does not match "directory/.profile")

Таким образом, вы должны иметь возможность сохранять статусы разрешений и владельцев, используя его в сочетании с TAR.

0
18.03.2021, 23:17

Теги

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