переименуйте файлы в пакете

Аппаратные проблемы на любой машине могут быть неприятными для трассировки, особенно более старые системы.

Исключением MCE или Машинного контроля является нечеловекочитаемый код ошибки, сгенерированный самим ЦП, когда аппаратная ошибка обнаруживается. Это могло включать ошибки с RAM, кэшем процессора или любым устройством на системной шине. Определение местоположения проблемы о процессорах прежних модификаций обычно только возможно методом проб и ошибок (или память тест если Ваше удачное).

Некоторые более новые процессоры дают немного более понятный MCEs, но он похож на Ваш, вероятно, старый AMD. Mcelog является демоном Linux, который может декодировать MCEs для современных x86 процессоров, которые, вероятно, были бы Вашей единственной надеждой на то, чтобы иметь любой некоторый смысл MCE.

Ваш лучший выбор, рассматривая время, которое Вы уже помещаете в него, состоит в том, чтобы заменить Материнскую плату/CPU/Memory одинаково старой и дешевой установкой, но это все еще функционирует.:)

6
13.04.2017, 15:36
5 ответов

Используя 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/' {} +
7
27.01.2020, 20:22

Это должно работать:

$ 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
4
27.01.2020, 20:22
  • 1
    так, мы должны удалить 00-биты отдельно, правильно? –  BaRud 23.01.2014, 21:52
  • 2
    @BaRud извините, я полностью пропустил это, Вы хотели удалить это также. См. обновленный ответ. –  terdon♦ 23.01.2014, 22:02

Совместимая с границей оболочка может сделать это без 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 поведение принимает меры против этой проблемы.

3
27.01.2020, 20:22
  • 1
    Почему нет for f in *.ogg вместо ls -1 | while read f? Кроме этого, это - хороший ответ, вероятно, что я сделал бы, если бы моя система не имела (perl-), переименовывают. –  evilsoup 24.01.2014, 14:02
  • 2
    Главным образом сила привычки. Я не думаю, что существует любое различие в поведении в этом случае. –  D_Bye 24.01.2014, 14:06
  • 3
    я думаю, существует различие на тех пограничных случаях, где у Вас есть новые строки в именах файлов. От того канала существует также, вероятно, различие в производительности, но об этом не стоит вызывать беспокойство на практике. –  evilsoup 24.01.2014, 14:11
  • 4
    Поскольку я сказал - никакое различие в этом случае. Но да, ls -1 | while read f повредился бы на действительно броских именах файлов. Я изменю ответ для использования более безопасного for f in *.ogg –  D_Bye 24.01.2014, 14:17

Это - то, куда Полуночный Командующий приезжает удобный. Выберите файлы с "+" или "Вставьте". Нажмите F6 для переименовывают. Маска набора к *.ogg.ogg.ogg и место назначения к * и нажмите Enter. Несомненно, это не автоматизировано, но это все еще "в пакете".

1
27.01.2020, 20:22
ls -1|while read f; do 
    newfile=$(echo $f|sed -e 's/\(\.ogg\)*$/.ogg/')
    mv "$f" "$newfile"
  done
0
27.01.2020, 20:22

Теги

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