Это можно сделать двумя способами:
vim
в сеансе screen
и подключитесь к нему с разных терминалов vim
в режиме клиент / сервер Дополнительная литература:
;
в конце команды, выполняемой от 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
.
Связанные: