Проблема с выводом в файл и переменную в bash в одной строке

Команда findудалит любой обычный файл в каталоге /home/_backups/pokebrawlили ниже, который старше семи дней (или, точнее, не изменялся в течение последней недели ).

Следует вероятно читать

find "$DESDIR" -mtime +6 -type f -delete

или

find "${DESDIR:?Not set correctly}" -mtime +6 -type f -delete

, так как уже существует отличная переменная, содержащая это имя каталога. Второй вариант вызовет ошибку, если DESDIRпо какой-либо причине будет пустым или неустановленным.

Я предполагаю, что это способ сохранить резервные копии только за последнюю неделю. Я бы предложил вместо этого использовать что-то вроде borgbackupили restic, так как они смогут хранить резервные копии намного дольше, не занимая много места (даже ежечасные резервные копии в течение года вообще не займут много места, если данные не сильно изменились ). Они выполняют дедупликацию данных и borgbackupдополнительно поддерживают сжатие (, а также поддерживают удаленное резервное копирование и шифрование ).

Чтобы запускать скрипт каждые 24 часа (в полночь ), используйте задание cron.

Сначала введите команду crontab -e. Это откроет редактор с текущим crontab для активного пользователя (это может быть или не быть пустым файлом ).

Затем добавьте

@daily /path/to/the/script.sh

(где path/to/the/script.sh— путь к скрипту ).

Сохраните и выйдите из редактора.

Сценарий теперь будет вызываться в полночь, даже ночью.

Если вы хотите запускать скрипт, скажем, в 13 :30 каждый день, добавьте вместо этого следующую запись в crontab:

30 13 * * * /path/to/the/script.sh

Подробную информацию о том, как составить расписание crontab, см. в руководстве по crontab для вашей системы.(man 5 crontab).

1
22.08.2020, 08:43
1 ответ

readиспользуется для захвата входных данных и присвоения их переменным. Он не производит вывод, поэтому перенаправление просто создаст пустой файл.

Вместо этого вы можете использовать командуtee. Он принимает ввод со стандартного ввода и записывает вывод в стандартный вывод, а также в один или несколько файлов.

Используя teeи присваивание переменной, вы можете сделать:

$ variable=$(printf "%s " $RANDOM $RANDOM $RANDOM $RANDOM | tee variable.txt)

Обратите внимание, что я использовал «%s», потому что вы просили, чтобы вывод был в одной строке.

Что дает вам:

$ echo $variable
31738 28009 6462 15565

$ cat variable.txt
31738 28009 6462 15565
1
18.03.2021, 23:10

Теги

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