Работая с Linux, вы можете столкнуться с некоторыми утилитами и приложениями, которые работают только с именами файлов в нижнем регистре. Обычно мы не сохраняем файлы в таком формате и, возможно, нам придется искать обходной путь, который рекурсивно преобразует все имена файлов в папке в нижний регистр. В этой статье мы покажем вам два способа преобразования всех имен файлов и папок по заданному пути в нижний регистр, просто используя командную строку.
Вот как можно перечислить содержимое папки с помощью команды find:
1 | find [имя_каталога] -depth |
В моей папке /tmp, которую я буду использовать в качестве примера для этой статьи, все файлы начинаются с заглавных букв, а также содержат несколько файлов между именами.
1 | find /tmp -depth |
Метод 1: Использование команды rename
В этом методе мы будем использовать команды Ubuntu find, Xargs и rename, чтобы рекурсивно переименовать все файлы/папки в заданном каталоге.
Откройте командную строку Ubuntu, Терминал, либо через поиск в Application Launcher, либо сочетанием клавиш Ctrl+Alt+T.
Вот синтаксис команды, которую вы будете использовать:
1 | find [имя_каталога] -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \; |
Если в вашей системе не установлена команда rename, вы можете получить ошибку при выполнении вышеуказанной команды. Вы можете установить rename в Ubuntu с помощью следующей команды apt-get:
1 | sudo apt-get install rename |
Я буду использовать следующую команду для преобразования имен файлов в нижний регистр в каталоге Downloads:
1 | find /tmp -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \; |
Когда я снова просмотрел содержимое каталога, я увидел, что все имена файлов преобразованы в нижний регистр следующим образом:
Метод 2: Использование сценария для переименования файлов
В этом методе мы воспользуемся сценарием bash, который использует команды find и mv для рекурсивного переименования имен файлов и папок каталога, включая само имя каталога.
Откройте приложение Terminal и перейдите в папку bin следующим образом:
1 | cd ~bin |
Теперь откройте новый файл скрипта в одном из ваших любимых текстовых редакторов. Мы будем использовать редактор nano, чтобы открыть пустой файл скрипта с именем lowercase_filenames.sh
1 | sudo nano lowercase_filenames.sh |
В этот пустой файл добавим следующий скрипт.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #!/bin/bash #print usage if [ -z $1 ];then echo "Usage :$(basename $0) parent-directory" exit 1 fi #process all subdirectories and files in parent directory all="$(find $1 -depth)" for name in ${all}; do #set new name in lower case for files and directories new_name="$(dirname "${name}")/$(basename "${name}" | tr '[A-Z]' '[a-z]')" #check if new name already exists if [ "${name}" != "${new_name}" ]; then [ ! -e "${new_name}" ] && mv -T "${name}" "${new_name}"; echo "${name} was renamed to ${new_name}" || echo "${name} wasn't renamed!" fi done exit 0 |
Вместо того чтобы вводить весь скрипт в ваш bash файл, вы можете скопировать его отсюда и вставить в Терминал, используя Ctrl+Shift+V, или используя опцию Paste из меню правой кнопки мыши.
Вот как будет выглядеть ваш файл:
Теперь выйдите из файла через сочетание клавиш Ctrl+X и сохраните файл на запрос "Сохранить измененный буфер?", набрав Y и нажав Enter.
Для того чтобы сделать этот файл исполняемым скриптом, выполните следующую команду в Терминале:
1 | sudo chmod +x lowercase_filenames.sh |
Теперь вы можете использовать этот скрипт в любой из ваших папок.
Когда я запускаю скрипт в папке tmp, я вижу, что имена всех файлов и вложенных папок преобразованы в нижний регистр следующим образом:
Итак, это были два способа, с помощью которых вы можете переименовать имена файлов в строчные буквы, чтобы используемое вами приложение не распознавало имена файлов в верхнем регистре.