Его специальные символы возможного применения на имя функции оболочки?

Вам нужно решить это Проблема в целом или только один раз? Если вам просто нужно решить это один раз, иногда простое решение лучше. Мы можем использовать расширение скобки в Bash:

rm vtm_data_12month_2014{09,10}{01..29}.txt

Это может работать в вашем случае с:

  • Количество аргументов, которые мы отправим к RM , вряд ли отправят нас через arg_max, а
  • В тот день, когда вы хотите остановиться, одинаково в октябре, так и в сентябре.

Если вам нужно решить эту проблему в целом, вам нужно будет учитывать тот факт, что разные месяцы в разных днях (октябрь, например, заканчиваются 31-й, но ваш пример имеет только данные до 30) Отказ

Если схема именования файлов в вашем примере можно полагаться, то следующее будет удалять все, кроме новейшего файла, доступного для каждого месяца (на основе имени файла, а не фактических временных метров, связанных с созданием или модификацией файла):

get_years() {
  find ./ -type f | cut -d'_' -f4 | cut -c1-4 | sort | uniq
}

get_months_for_year() {
  year=$1
  find ./ -iname "vtm_data_12month_${year}*.txt" -type f | cut -d'_' -f4 | cut -c5-6 | sort | uniq
}

get_latest_for_year_month() {
  year=$1
  month=$2
  find ./ -iname "vtm_data_12month_${year}${month}*.txt" -type f | cut -d'_' -f4 | cut -c7-8 | sort | tail -1
}

for year in $(get_years); do
  for month in $(get_months_for_year $year); do
     latest=$(get_latest_for_year_month $year $month)
     end=$(($latest - 1))
     for i in $(seq 1 $end); do 
      day=$(printf '%02d' $i)
      rm vtm_data_12month_${year}${month}${day}.txt
     done
  done
done

Язык, отличный от Bash, который имеет библиотеку DATETIME, скорее всего, даст вам более симпатичное и надежное решение. Оба решения, представленные здесь, выделяют ошибки, если файлы на определенные дни отсутствуют.

0
26.03.2015, 02:13
2 ответа

Большинство оболочек ограничивают имя функций, чтобы содержать только символы, которые не нужно котироваться, что исключает > .

Даже в немногих снарядах, которые позволяют > > в качестве имени функции (я только знаю ZSH), определяя функцию под названием «> , только если вы позвонили бы > как команда (которая потребует цитирования его, т. Е. Беги \> или «>» или '>' ). Это не изменило бы, как работает перенаправление.

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

2
28.01.2020, 02:28

> имеет особое значение в оболочке, это оператор перенаправления, см. меню:

.

[n]> файл Перенаправление стандартного вывода (или n) в файл.

Имя функции может содержать только буквы (a-z или A-Z), цифру (0-9) или символ подчеркивания (_). Также не должно начинаться с цифры. (см. Команда определения функции и Имя)

.
1
28.01.2020, 02:28

Теги

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