Отставание Ubuntu 18.04 после перехода на более раннюю версию ядра 5.3 ->4.4

Расширение вашего подхода и использование расширения параметров:

export author_string='author1'
export new_string='author1'
find. -type f -name "*${author_string}*" \
  -exec sh -c '
    path="${1%/*}"
    tmp="${1%%${author_string}[^/]*}"
    before="${tmp##*/}"
    after="${1##*${author_string}}"
    echo mv -- "$1" "${path}/${new_string}_${before}${after}"' sh {} \;

Мои предположения, так как я не уверен, что полностью понял ваш вопрос:

Вы ищете файлы, имя которых содержит фиксированную строку; здесь переменная author_string.
Вы переименовываете файлы везде в дереве каталогов.
Новое имя ваших файлов будет начинаться с фиксированной строки (она будет такой же, как author_stringили нет, не имеет большого значения ); здесь переменная new_string.
Остальная часть нового имени ваших файлов будет равна их старому имени, за исключением части author_string, которую вы хотите удалить.

В этом коде:

  • Мы экспортируем наши старые/новые строки, чтобы сделать их доступными для оболочки, вызванной find.

  • Чтобы обеспечить мобильность, -execвызывает sh. $1используется вместо $0, как в ваших фрагментах, потому что $0обычно используется для установки имени оболочки/команды.

  • Для каждого файла мы разделяем его полный путь:

    • path="${1%/*}"— полный путь с удаленной частью имени файла.:${parameter%word}удаляет суффикс, соответствующий шаблону word;

    • tmp="${1%%${author_string}[^/]*}"захватывает часть полного пути каждого файла, которая предшествуетauthor_string:${parameter%%word}удаляет самый длинный суффикс , соответствующий шаблону word. Мы используем [^/], чтобы игнорировать любое вхождение author_stringкак части имен каталогов;

    • before="${tmp##*/}"захватывает только ту подстроку, которая является частью имени файла.:${parameter##word}удаляет самый длинный префикс, соответствующий шаблону word;

    • after="${1##*${author_string}}"— часть имени файла, следующая после author_string;

  • Мы переименовываем каждый файл.

Обратите внимание, что если author_stringповторяется в имени файла, все промежуточные значения теряются.

Кроме того, имейте в виду, что вам нужно будет экранировать (с помощью\)всех символов в author_string, которые имеют особое значение сопоставления с образцом,если вы хотите, чтобы соответствовать им буквально.

Учитывая дерево каталогов:

$ tree.
.
├── testdir
│   ├── title2_author1_date.book
│   ├── title3_author1_date.book
│   └── title4_author2_date.book
├── title1_author1_date.book
└── title5_author2_date.book

Этот код делает:

$ export author_string='author1' new_string='author1'; find. -type f -name "*${author_string}*" -exec sh -c 'path="${1%/*}"; tmp="${1%%${author_string}[^/]*}"; before="${tmp##*/}"; after="${1##*${author_string}}"; echo mv -- "$1" "${path}/${new_string}_${before}${after}"' sh {} \;
mv --./title1_author1_date.book./author1_title1__date.book
mv --./testdir/title3_author1_date.book./testdir/author1_title3__date.book
mv --./testdir/title2_author1_date.book./testdir/author1_title2__date.book

Удалите echoиз команды, когда почувствуете, что готовы действительно переименовать файлы.


Ссылки:

Расширение параметра в «Основных спецификациях Open Group, выпуск 7, издание 2018 г.» (POSIX.1 -2017)

0
13.07.2020, 18:01
1 ответ

Вполне вероятно, что ваше новое ядро ​​имеет дополнительные графические API, которые используются в вашем новом пользовательском пространстве, а ваше старое ядро ​​​​нет. Кроме того, Ubuntu может поддерживать дополнительные необходимые API, которых нет в вашем старом ядре.

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

В целом, если вы используете определенную версию Ubuntu, вам нужно будет использовать ее ядро ​​или более новую исходную версию и, возможно, гораздо более новую исходную версию для обеспечения хорошей производительности. На самом деле, если вы не являетесь продвинутым пользователем и не понимаете, что делаете, вам гораздо лучше использовать ядро ​​дистрибутива. Переход на более старое ядро, как вы делаете, не сработает. Вместо этого рассмотрите возможность использования виртуальной машины для тестирования.

0
18.03.2021, 23:20

Теги

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