Регулярное выражение для нефиксированного шаблона

Я считаю, что использование rsyncs, встроенного в параметры удаления, не является правильным способом решения этой проблемы. Если вы сделаете что-то вроде следующего:

$ rsync -azvP --remove-source-files /dir-src/* host-dst:dir-src/

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

Возможно, вы захотите рассмотреть это вместо этого. Пусть rsync выполняет передачу как обычно, тогда вы можете настроить cronjob , который запускается каждые десять минут и делает что-то вроде этого.

$ find /dir-src -type f -mmin +15 -exec rm -f {} +

Это найдет все файлы в каталоге dir-srcстарше 15 минут и удалит их. Здесь мы предполагаем, что максимальное время, необходимое для заполнения файла, составляет 15 минут. Вы можете настроить это значение в соответствии с вашими потребностями. Кроме того, во время тестирования замените -exec rm -f {} +на -print, это гарантирует, что find будет собирать только те файлы, которые вы действительно хотите удалить, прежде чем выполнять какую-либо деструктивную операцию.

В своем комментарии вы говорите, что у вас ненадежное сетевое соединение, и вы обеспокоены тем, что rsync может не завершиться успешно.Одним из способов обойти это может быть следующий после создания вспомогательного каталога:

  1. Каждые 15 минут перемещать все файлы старше 15 минут из dir-srcв dir-aux.
  2. Каждые 10 минут файлы rsync с dir-auxпо host-dst:dir-src.
  3. Каждые 60 минут удалять все файлы в dir-aux.

Это гарантирует, что rsync сможет запуститься 5 -6 раз, прежде чем файлы будут удалены. В зависимости от вашего соединения этого, вероятно, достаточно. Затем вы можете увеличить или уменьшить эти 60 минут в зависимости от результатов тестирования.

0
29.04.2015, 07:30
1 ответ

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

Я не говорю, что это невозможно (у вас есть конечный набор чисел, так что технически вы можете перечислить все возможные комбинации файлов "вручную" с помощью очень неприятного многострочного регулярного выражения -), я хочу сказать, что :зачем его вообще использовать, если можно написать код на Python, чтобы сделать это (намного быстрее )? У вас может быть что-то вроде отсортированного списка всех чисел ["one",..., "twelve"]и дней ["first",..., "twelfth"], а затем разбить файл (как большойstr)по строкам (, сделав его списком из strс )а затем проверить строки в цикле for, используя индексы в этих списках?

1
11.06.2021, 21:39

Теги

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