Как я могу получить записи в течение данного периода времени от 400 МБ + файл журнала?

Возможно, эти файлы имеют имена, содержащие пробел.

Простое правило программирования оболочки: Всегда используйте двойные кавычки вокруг переменной и управляйте заменами (если Вы не знаете, почему необходимо пропустить их). Так:

for i in *; do mv "$i" "$(echo "$i" | sed 's/.flac//g')"; done

В то время как Вы в нем, существует несколько вещей, Вы могли добиться большего успеха в той команде, даже если они не источник Вашей проблемы. Необходимо выполнить команду только на файлах, на которые она, как предполагается, влияет, не каждый файл в текущем каталоге. sed regexp .flac мог соответствовать чему-то другому, чем расширение. Команда может также перестать работать, если у Вас есть имя файла, которое начинается с a - или это содержит обратную косую черту (с некоторыми версиями echo).

for i in *.flac.mp3; do mv -- "$i" "$(echo "$i" | sed 's/\.flac\.mp3$/\.mp3/')"; done

Но на самом деле Вы не должны беспокоиться sed здесь, существует конструкция оболочки для удаления суффикса из строки.

for i in *.flac.mp3; do mv -- "$i" "${i%.flac.mp3}.mp3"; done

-- гарантирует это даже если $i начинается с a -, это не будет интерпретироваться как опция. Альтернативный метод должен гарантировать это $i никогда не начинается -, например, путем обеспечения, что все имена файла прямого доступа снабжаются префиксом ./ (который не имеет никакого эффекта на то, какой файл определяется с тех пор . текущий каталог).

  поскольку я в ./*.flac.mp3; сделайте mv "$i" "${i%.flac.mp3}.mp3";готово

Существует много инструментов для автоматизации переименований файла; обзор здесь для нескольких идей. Например, если Ваша оболочка является zsh:

autoload zmv    # goes into your .zshrc
zmv '(*).flac.mp3' '$1.mp3'

2
27.04.2012, 01:06
2 ответа

Не уверенный, если бы это работало бы хорошо на Ваш файл 400 МБ, но здесь является некоторым CLI лайнеры, которые добились бы цели.

Если Вы ищете записи для определенной даты, grep -c может, вероятно, сделать то, в чем Вы нуждаетесь.

Иначе Вы могли, вероятно, использовать sed:

sed -n '/date1/,/date2/p' filename

Например, с входным файлом "тест":

Day 0: foo
Day 1: hello
Day 2: world
Day 3: blah

Вы могли работать

[me@mybox tmp]$ sed -n '/Day 1/,/Day 2/p' test
Day 1: hello
Day 2: world
4
27.01.2020, 22:01
  • 1
    Это ничего не произведет, если никакая строка не будет содержать дату начала и произведет до конца файла, если никакая строка не содержит дату окончания. Отсутствие даты может быть вызвано сервером вниз, никаким событием или вращением журнала. Таким образом, я не рассчитывал бы на присутствие каждой даты. –  manatwork 27.04.2012, 13:29
  • 2
    Это ничего не произведет, если никакая строка не будет содержать дату начала и произведет до конца файла, если никакая строка не содержит дату окончания. Отсутствие даты может быть вызвано сервером вниз, никаким событием или вращением журнала. Таким образом, я не рассчитывал бы на присутствие каждой даты. –  manatwork 27.04.2012, 13:29
  • 3
    Правда, но это почти столь просто, как можно добраться, не анализируя даты и выяснив, когда Вы пересеклись. Мое предположение было то, что с 400 МБ файлы журнала, вращение не могло бы быть проблемой и существуют, вероятно, события близко к Вашей сфере интересов. Для проблемы вращения, по крайней мере, всегда существует cat, zcat, и т.д.... –  zje 27.04.2012, 17:56

Рассмотрите использование инструментов, таких как splunk, loglogic, logrhythm, graylog2.org (открытый исходный код)

0
27.01.2020, 22:01

Теги

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