Застрял с использованием find и sed для замены строки в именах файлов

У меня была такая же проблема. И это произошло только в iTerm2 на моем Mac. Итак, я нашел решение. Вам просто нужно отключить флажок «Сохранить строки для прокрутки в альтернативном режиме экрана».

Этот параметр сохраняется в каждом профиле на вкладке «терминал».Скриншот следует.Screenshot

3
19.07.2019, 11:20
2 ответа

Вы можете использовать find -exec...для замены в однострочном -сценарии оболочки.

find. -name "*.mp3" -type f -exec bash -c 'mv "$1" "${1/pronunciation_de_}"' bash {} \;

Имя файла {}передается в качестве параметра $1выполняемому процессу bash, и ${1/pronunciation_de_}использует возможности расширения параметров bash и заменяет первое вхождение pronunciation_de_в $1с пустой строкой.

Дополнительный параметр -type fобеспечивает соответствие только обычным файлам.

0
27.01.2020, 21:33

Если вы хотите удалить префикс pronunciation_de_из всех файлов с именами, оканчивающимися на .mp3, вам следует искать файлы с именами, соответствующими pronunciation_de_*.mp3, чтобы убедиться, что вы не изменили другие имена файлов по ошибке. (как бы маловероятно это ни было ).

Не используйте инструменты редактирования, ориентированные на строку -текста -, такие как sedв именах файлов. Оболочка знает, как эффективно удалять строки префиксов и суффиксов из имен файлов.

Используя find, вы можете решить проблему с

find. -type f -name 'pronunciation_de_*.mp3' -exec sh -c '
    for pathname do
        newname=${pathname##*/}              # removes directory path, leaves filename
        newname=${newname#pronunciation_de_} # deletes the prefix string

        mv -i "$pathname" "${pathname%/*}/$newname"
    done' sh {} +

Команда findгенерирует пути к файлам, прошедшим тесты -typeи -name, и передает их пакетами короткому встроенному сценарию sh -c.

Этот скрипт перебирает заданные пути и для каждого пути создает новое имя путем

  1. удаление исходного пути к каталогу, преобразование имени пути, например ./some/path/pronunciation_de_werden.mp3, в pronunciation_de_werden.mp3, а затем
  2. удаление строки префикса pronunciation_de_, преобразование pronunciation_de_werden.mp3в werden.mp3.

Команда mvпереименовывает исходный файл, перемещая его на новое имя в исходном каталоге.(${pathname%/*}будет расширен до исходного пути к каталогу ).

0
06.04.2020, 07:09

Теги

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