Как изменить имена файлов, в которых есть пробелы, с использованием сценария

Вопрос или проблема

У меня есть несколько файлов в ~home (в разных подкаталогах) на моей системе Ubuntu 22.04. Я считаю, что большинство имен файлов с пробелами изначально пришли из Windows.

Я нахожу проблемные файлы с помощью следующей команды find

find . -name “* *”

Как можно изменить имена, чтобы в них вместо пробела был _ или какой-то другой символ во всех файлах, в названиях которых сейчас есть пробел?

Например, я хочу изменить

MSC MACHINE FEET ORDER.pdf

на

MSC_MACHINE_FEET_ORDER.pdf

Используя команду find, я определил, что у меня есть около 600 файлов, названия которых нужно изменить, поэтому мне нужен автоматизированный способ их переименования.

Названия файлов с пробелами вызывают проблемы при запуске некоторых скриптов.

Заранее спасибо за вашу помощь.

Вы можете использовать расширение параметров, чтобы заменить пробелы на подчеркивания:

find -name '* *' -exec bash -c 'mv "$1" "${1// /_}"' -- {} \;
  • ${1// /_} означает “заменить каждый пробел в первом параметре на подчеркивание” (см. Расширение параметров в man bash).
  • bash -c выполняет команды из первого необязательного аргумента. Здесь команда — это mv, которая заменяет пробелы подчеркиваниями.
  • Первый аргумент после аргумента команд для bash -c сейчас не важен, поэтому я использовал --. Оставшиеся аргументы устанавливаются как позиционные аргументы для команды.
  • find -exec выполняет команду для каждого найденного файла. {} заменяется на имя файла, а финально \; говорит find, где заканчивается команда. Таким образом, find вызывает bash -c и передает имя файла в качестве первого аргумента, чтобы его можно было переименовать.

Эта сложная инкантация необходима, чтобы сохранить пробелы в первом аргументе для mv.

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

Ответ или решение

Изменение имен файлов, содержащих пробелы, на имена с символами подчеркивания, может быть важной задачей для повышения совместимости файловой системы, особенно если первоначальные файлы поступили из операционных систем с другой файловой структурой, таких как Windows. В вашем случае, вы хотите заменить пробелы в именах файлов на символ подчеркивания на Ubuntu 22.04, используя скрипт.

Теория

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

Пример

Вы можете использовать команду find совместно с параметрическим расширением в Bash для автоматизации этой задачи. Приведенный ниже пример демонстрирует, как можно заменить пробелы в именах файлов под символы подчеркивания:

find . -name '* *' -exec bash -c 'mv "$1" "${1// /_}"' -- {} \;

Применение

  1. Поиск файлов с пробелами: Команда find . -name '* *' ищет все файлы и директории, в именах которых присутствуют пробелы, начиная от текущего каталога и глубже.

  2. Использование параметрического расширения: Внутри команды bash -c 'mv "$1" "${1// /_}"', параметрическое расширение ${1// /_} заменяет каждый пробел в строке на символ подчеркивания. Это достигается благодаря средствам Bash, которые позволяют изменять строковые значения непосредственно с помощью синтаксических конструкций оболочки.

  3. Использование exec: Утилита find со встроенной командой -exec позволяет выполнить заданную команду для каждого найденного файла по отдельности. В данном случае bash -c используется для выполнения команды обратной замены пробелов, где файл сначала копируется с новым именем, а затем старый удаляется.

Обратите внимание, что массовое переименование файлов может привести к отрицательным последствиям, если программы зависят от старых имен файлов. Рекомендуется предварительно сохранить резервные копии важных данных и протестировать операцию на небольшом наборе файлов для убедительности.

Эти шаги помогут вам успешно автоматизировать процесс замены пробелов в именах файлов на символы подчеркивания, сохраняя при этом последовательность ваших рабочих процессов на Ubuntu 22.04.

Оцените материал
Добавить комментарий

Капча загружается...