Поиск по сайту:

Переименуйте все имена файлов и каталогов в нижний регистр в Linux


В нашей предыдущей статье мы описали, как подсчитать количество файлов и подкаталогов внутри данного каталога. Это руководство покажет вам, как переименовать все имена файлов и каталогов в нижний регистр в Linux.

Читайте также: как узнать самые популярные каталоги и файлы (дисковое пространство) в Linux

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

find Files -depth

1. Использование команд find, xargs и переименования вместе

rename — это простая утилита командной строки для одновременного переименования нескольких файлов в Linux. Вы можете использовать его вместе с утилитой find, чтобы переименовать все файлы или подкаталоги в определенном каталоге в нижний регистр следующим образом:

find Files -depth | xargs -n 1 rename -v 's/(.*)\/([^\/]*)/$1\/\L$2/' {} \;

Объяснение опций, используемых в приведенной выше команде.

  • -глубина — отображает содержимое каждого каталога перед самим каталогом.
  • -n 1 – указывает xargs использовать не более одного аргумента в каждой командной строке из вывода find.

Пример вывода после переименования файлов и подкаталогов в нижний регистр в каталоге Files.

Другой альтернативный способ использования команд find и mv в сценарии, как описано ниже.

2. Использование команд find и mv в сценарии оболочки

Сначала создайте свой скрипт (вы можете назвать его как угодно):

cd ~/bin
vi rename-files.sh

Затем добавьте в него приведенный ниже код.

#!/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

echo
echo
#list directories and file new names in lowercase
echo "Directories and files with new names in lowercase letters"
find $(echo $1 | tr 'A-Z' 'a-z') -depth

exit 0

Сохраните и закройте файл, затем сделайте скрипт исполняемым и запустите его:

chmod +x rename-files.sh
rename-files.sh Files     #Specify Directory Name

Вам также может быть интересно прочитать следующие статьи по теме.

  1. Объяснение «Все является файлом» и типов файлов в Linux
  2. fswatch — отслеживает изменения или модификации файлов и каталогов в Linux.
  3. Fasd — инструмент командной строки, обеспечивающий быстрый доступ к файлам и каталогам
  4. FSlint – Как найти и удалить повторяющиеся файлы в Linux

В этом руководстве мы объяснили вам, как переименовать все файлы и каталоги в нижний регистр в Linux. Если возникнут какие-либо ошибки, пожалуйста, свяжитесь с нами через форму обратной связи ниже. Вы также можете предложить нам любые другие способы сделать то же самое.