Как указать формат даты для функции

Это должно работать так же, как ответ @Gilles, но более компактно:

rm -rf {,.[!.],..?}*

или

rm -rf dir/to/files/{,.[!.],..?}*

также следует добавить if для использования в скриптах на всякий случай:

if [ -d "$DIR" ]; then
    rm -rf ${DIR}/{,.[!.],..?}*
fi
0
13.07.2017, 14:35
2 ответа

На самом деле все зависит от версии date, которую вы используете.

GNU dateожидает, что дата ввода будет yy[y]*mmddкак в20170713(13 июля 2017 )или1000901123(23 ноября 100090, да, год faaaar в будущем; -)). Он надежно печатает даты до 10 дикситов, не знаю, что он делает в последующие годы... год, когда 2140000000работает, год 2150000000не работает в моей системе.

Вы также можете использовать человеческие выражения, такие как date -d 'yesterday', опять же, не переносимые.

Используйте sed, чтобы преобразовать дату в yyyymmdd.

0
28.01.2020, 02:25

GNU dateделает все возможное, чтобы проанализировать ваш ввод, но некоторые форматы по своей сути неоднозначны.

BSD dateпозволяет (или практически требует )указать формат ввода с помощью -f, а затем просто анализирует ввод в соответствии с этим, выдавая ошибку, если ввод не соответствует формату.

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

Wackydate () {
    local day  # local is a Bashism
    local mon
    local year
    year=${1%????}
    mon=${1#$year??}
    day=${1#$year}
    day=${day%$mon}
    shift
    date -d "$year$mon$day" "$@"
}

Подстановки параметров оболочки ${variable#prefix}и ${variable%suffix}возвращают значение variableс любым подстановочным знаком в выражении после удаления #или %в начале или конце соответственно.

2
28.01.2020, 02:25

Теги

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