Невозможно удалить файлы из терминала - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть папка с резервными копиями базы данных, но я хочу автоматизировать ее с помощью cron для удаления старых резервных копий.

поэтому я создал следующий скрипт

#Get the current year
YEAR=$(date +'%Y')

#Get the current month
MONTH=$(date +'%m')

#Delete data from previous months
deleteOldData() { ls /root/copy/dbbackup/smpp_credits/ | awk -F "-" -v m="$MONTH" '$2 < m' | xargs -d "\n" rm -rf ;}

#Delete data from previous years ( if any )
deletePrevYearData() { ls /root/copy/dbbackup/smpp_credits/ | awk -F "-" -v y="$YEAR" '$3 < y' | xargs -d "\n" rm -rf ;}

deleteOldData

deletePrevYearData

Выполнение ls /root/copy/dbbackup/smpp_credits/ | awk -F "-" -v m="$MONTH" '$2 < m' в терминале работает должным образом (в нем перечислены необходимые файлы). но после добавления | xargs -d "\n" rm -rf код запускается и возвращается без какого-либо вывода, и проверка каталога показывает, что файлы все еще там. Кстати, этот код хранится и выполняется из .sh файла

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Предполагая, что GNU find и date, -newermt можно использовать для сравнения времени изменения файла с конкретной датой, указанной в качестве аргумента:

delete_older_than_date="$(date +'%Y-%m-01')"
find /root/copy/dbbackup/smpp_credits \
  -maxdepth 1 \
  -type f \
  '!' -newermt "$delete_older_than_date" \
  -exec rm -rf -- '{}' +
0 голосов
/ 27 апреля 2018

Парсинг ls вывод широко считается плохой идеей. Я бы попробовал найти команду, которая должна быть чище.

find /root/copy/dbbackup/smpp_credits/ -maxdepth 1 -mtime +365 -exec rm -rf {} \;

из здесь . Вы можете использовать -mtime +30 для файлов старше одного месяца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...