2013-03-07 3 views
0

Итак, что я пытаюсь сделать, все мои резервные папки называются датами 03-07-13. Поэтому я пытаюсь выбрать день, и если он больше или равен 7 дням, он удалит. Это то, что у меня есть до сих пор, но оно не работает.Получение имени папки и сравнение с целым числом в bash

DATE=$(date +"%d") 

for i in /media/backupdrive/*; do 
    DAY=${i:22:2} 
    if [ "$DAY" -ge "7" ] 
    then 
     echo "day greater than 7"; 
    fi 
done 

в 22: 2 отсекает/СМИ/backupdrive/00-

00 представляет месяц

Сейчас это просто проверка, если это больше, чем 7, если она есть, она печатает это из.

EDIT: Проблема решена. Я хочу поблагодарить всех вас за помощь начинающему bash. Еще раз спасибо!

+0

... так что вы думаете? –

+0

Извините, не поделился этим. ИТ говорит, что выражение interger ожидается в строке оператора if. Мне нужно сделать переменную DAY целой, чтобы сравнить ее с текущим днем, и если она больше или равна 7. – user2142183

+0

Если вы выполняете 'echo $ DAY'' внутри loop, каково значение? – newfurniturey

ответ

1

Per скриншота приведен в комментариях, ваш фактический код использует следующее:

DAY=${i:22:2} 
if [ "$day" -ge "7" ] 

акцента на капитализации различиях между DAY и $day. Когда это выполняется, он пытается сравнить пустую строку со строкой (или «номерами» через -ge) и , это приведет к ошибке, которую вы получаете.

Попробуйте обновить свой if заявление использовать прописную версию:

if [ "$DAY" -ge "7" ] 
+0

Вы, ребята, не представляете, сколько проблем у меня было с этим. Спасибо, что помогли начинающему прогрессу !!!!! – user2142183

0

Использование переменной «DAY» открывает вам проблемы с «просто перевернутыми».

Некоторые альтернативы:

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

время формат я обычно использую включает следующее:

[epoch seconds]-[YYYY][MM][DD]-[HH]:[MM]:[SS] 

Это позволяет делать такие вещи, как просят для создания резервных копий, которые 7 дней от прямо сейчас. Вы бы сделали математику против эпох секунд, что позволяет избежать путаницы дней, перевернувшихся.

В принципе, эпоха секунд предназначена для облегчения расчета времени. Другие биты временного штампа делают его понятным для человека. Заказ делает его таким, чтобы он правильно сортировался в списке папок.

EDIT:

В случае резервного копирования путь когда-либо изменения:

DAYtmp=${i: -8:5} 
    DAY=${DAYtmp: -2} 

Это даст день от имени папки, если родительские пути изменить длину.

1

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

find /media/backupdrive -mtime +7   # Files that are older than 7 days 
find /media/backupdrive -mtime +7 -delete # ... and delete them 
Смежные вопросы