Аппаратные проблемы на любой машине могут быть неприятными для трассировки, особенно более старые системы.
Исключением MCE или Машинного контроля является нечеловекочитаемый код ошибки, сгенерированный самим ЦП, когда аппаратная ошибка обнаруживается. Это могло включать ошибки с RAM, кэшем процессора или любым устройством на системной шине. Определение местоположения проблемы о процессорах прежних модификаций обычно только возможно методом проб и ошибок (или память тест если Ваше удачное).
Некоторые более новые процессоры дают немного более понятный MCEs, но он похож на Ваш, вероятно, старый AMD. Mcelog является демоном Linux, который может декодировать MCEs для современных x86 процессоров, которые, вероятно, были бы Вашей единственной надеждой на то, чтобы иметь любой некоторый смысл MCE.
Ваш лучший выбор, рассматривая время, которое Вы уже помещаете в него, состоит в том, чтобы заменить Материнскую плату/CPU/Memory одинаково старой и дешевой установкой, но это все еще функционирует.:)
Используя perl-переименовывают (который является одним из двух инструментов, который обычно называют rename
; другой использует совсем другой синтаксис и не может сделать этого за один шаг):
rename -f 's/00 - ([^.]*).*/$1.ogg/' *.ogg
-f
или --force
опция делает, переименовывают, перезаписывают любые существующие файлы.
Вторая часть является заменой регулярного выражения perl-стиля. Базовый синтаксис s/replacethis/withthis/
Шаблон для соответствия- 00 - ([^.]*).*
- будет соответствовать всем *.ogg файлам именам как те, которые в Вашем вопросе. 00 -
- очевидно, это просто соответствует шаблону в начале каждых из имен файлов. ([^.]*)
суть регулярного выражения. [^.]
будет соответствовать любому отдельному символу, который не является a .
, в то время как *
означает 'любое количество предыдущей вещи', таким образом, [^.]*
означает 'любое количество любых символов, которые не являются .
'. Круглые скобки размечают группу получения (больше на этом за секунду). В регулярных выражениях, .
означает 'любой символ' (если Вы хотите литеральную точку на этой стороне замены, необходимо выйти из него, как в: \.
), таким образом, финал .*
означает 'любое количество любого символа'.
Во второй части команды замены, $1
означает 'первую группу получения' - то есть, то, что содержится в первой паре круглых скобок (см.? Сказанный Вас я возвратился к нему). .ogg
означает литерал '.ogg' - на этой стороне замены, Вы не должны выходить из точки.
Так, примерно переведенный на английский язык, 's/00 - ([^.]*).*/$1.ogg/'
говорит rename
'взять "00 -", сопровождаемый (любое количество символов, которые не являются точкой), затем любое количество символов; и замена это с символами, содержавшими в скобках и ".ogg"'..
В некоторых системах perl-переименуйте, назван prename
(когда rename
взят вышеупомянутой другой программой). В некоторых системах это не доступно вообще :(
Для рекурсивности можно выполнить одно из следующих действий:
shopt -s globstar ## assuming your shell is bash
rename 's/00 - ([^.]*).*/$1.ogg/' **/*.ogg
Или:
find . -name '*.ogg' -exec rename 's/00 - ([^.]*).*/$1.ogg/' {} +
Это должно работать:
$ for f in *ogg; do
mv "$f" "$(printf "%s" "$f" | perl -lpe 's/^\d+ - (.*?).ogg.*/$1.ogg/')";
done
Чтобы сделать это для всех файлов, включая файлы в подкаталогах, любой активируется globstar
если Вы используете удар:
$ shopt -s globstar
$ for f in **/*ogg; do
mv "$f" "$(printf "%s" "$f" | perl -lpe 's/^\d+ - (.*?).ogg.*/$1.ogg/')";
done
Броский материал обрабатывается жемчугом. Это - простое регулярное выражение, которое удаляет все числа (\d+
) сопровождаемый -
(это - тире с пространством с обеих сторон) с начала входной строки, соответствия все до кулака .ogg
и замены eveything после этого с совпавшей строкой ($1
) и .ogg
.
Это могло быть расширено до более громоздкого, но более читаемого:
for f in *ogg; do
newname=$(printf "%s" "$f" | perl -lpe 's/^\d+ - (.*?).ogg.*/$1.ogg/')";
mv "$f" "$newname";
done
Совместимая с границей оболочка может сделать это без Perl или sed (но его эстетическое обращение сомнительно...),
for f in *.ogg
do
newfile="${f#00 - }" ## Strip the leading "00 - "
newfile="${newfile%%.ogg*}" ## Strip .ogg and everything after
newfile="${newfile}.ogg" ## Append .ogg
mv "$f" "$newfile" ## Do the rename
done
Обратите внимание, что это также возможно использовать ls -1 | while read f
создать цикл, но эту конструкцию повредилось бы в конечном счете, это встретилось с именем файла с символом новой строки. Используя стандарт оболочки globbing поведение принимает меры против этой проблемы.
for f in *.ogg
вместо ls -1 | while read f
? Кроме этого, это - хороший ответ, вероятно, что я сделал бы, если бы моя система не имела (perl-), переименовывают.
– evilsoup
24.01.2014, 14:02
ls -1 | while read f
повредился бы на действительно броских именах файлов. Я изменю ответ для использования более безопасного for f in *.ogg
– D_Bye
24.01.2014, 14:17
Это - то, куда Полуночный Командующий приезжает удобный. Выберите файлы с "+" или "Вставьте". Нажмите F6 для переименовывают. Маска набора к *.ogg.ogg.ogg
и место назначения к *
и нажмите Enter. Несомненно, это не автоматизировано, но это все еще "в пакете".
ls -1|while read f; do
newfile=$(echo $f|sed -e 's/\(\.ogg\)*$/.ogg/')
mv "$f" "$newfile"
done