2015-02-17 3 views
0

Мне нужна помощь скрипта bash, чтобы прочитать все файлы в каталоге ftp и удалить их после диапазона дат, указанного на его имени.Сравнение дат в bash

Каждый файл имеет имя, например «title% m% d% Y% m% d% Y» (например, события 02172015 02192015.png). Возможно ли прочитать все файлы в каталоге, сравнивающие имена с датой сервера, и удалить те, диапазон дат которых превышает текущую дату?

Большое спасибо!

+1

'% м% d% Y' делает это излишне сложным (а также сбивает с толку человека читателей из частей мира, где'% г % m% Y' является условным). Есть ли веская причина, по которой вы не можете использовать '% Y% m% d' (что устраняет эту двусмысленность, и в этом случае простое лексическое сравнение дат скажет вам, что является более новым)? –

+1

Если вы можете контролировать вещи до этого момента, почему бы не организовать файлы в папках «ГГГГ/ММ/ДД» ... так что удаление их с течением времени является тривиальной задачей? –

ответ

1

Первый - измените формат файла. Использование %Y%m%d значительно уменьшит количество боли и страданий (и, в качестве побочного эффекта, сделает инструменты, сортирующие по имени файла, автоматически поместит ваши файлы в порядке по дате).

Отвечая на ваш вопрос, как первоначально спросил, однако ...

today=$(date +%Y%m%d) 

# filter for filenames with at least two spaces and a period 
for f in *" "*" "*.*; do 
    without_extension=${f%.*} 
    end_date=${without_extension##* } 

    ## now, if you were using YYYYMMDD, you could just do this: 
    # [[ $end_date < $today ]] && rm -f -- "$f" 

    ## ...however, since you aren't, you need all this mess: 
    mon=${end_date:0:2} 
    day=${end_date:2:2} 
    year=${end_date:4:4} 
    end_date_sane=${year}${mon}${day} 
    [[ $end_date_sane < $today ]] && rm -f -- "$f" 

done 
+0

Спасибо, Чарльз, Это именно то, что мне нужно. Однако, как только моя папка находится в местоположении FTP, похоже, что я не могу использовать сценарий оболочки с FTP-соединением :(http://unix.stackexchange.com/questions/55719/how-to-loop-through-each-file -in-ftp-directory-using-a-bash-script – DDS

+0

«Can not» немного силен словом. Есть FTP-сервер FUSE для FTP, и один из них сделает ваш FTP-ресурс похожим на обычную файловую систему. например, http://curlftpfs.sourceforge.net/ –

+0

Также возможно запустить FTP-клиент в качестве сопроцесса из сценария оболочки ... при этом, хотя это возможно, это, конечно, не очень просто, а не проект большого новичка. –