Profile picture for Admin

Иногда возникает задача с транслитерацией имени файла в Linux. Вручную делать лень, особенно когда файлов больше чем один. Устаналивать дополнительные программы, которые делают такую ерундовую задачу тоже нет особого желания. Данный скрипт автоматизирует эту работу. Для универсальности, можно закинуть скрипт в /usr/local/bin и использовать его везде.

Создайте файл с именем t.sh

#!/bin/sh

# Rename utility.

if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
    echo "usage: $(basename $0) FILE [...]"
    echo
    exit 0
fi
IFS=$'
    '
for f in "$@"
do
    if [ ! -f "$f" ]; then
        echo "$(basename $0) warn: this is not a regular file (skipped): $f" >&2
        continue
    fi

    NEWFILENAME="$(basename "$f")"
    NEWFILENAME="$( echo -n "$NEWFILENAME" | { uconv -x 'Any-Latin;Latin-ASCII' || cat ; } )" # convert non-latin chars using uconv from the icu-devtools package
    NEWFILENAME="$( echo -n "$NEWFILENAME" | iconv -f UTF-8 -t ascii//TRANSLIT//IGNORE )"
    NEWFILENAME="$( echo -n "$NEWFILENAME" | sed -e 's/[+]/_plus_/g' \
        |tr -c '[A-Za-z0-9._\-]' '_' \
        | tr '\[\]' '_' \
        | sed -e 's/__*/_/g' \
        | sed -e 's/_\././g' )"

    if [ -f "$(basename $f)/$NEWFILENAME" ]; then
        echo "$(basename $0) warn: target filename already exists (skipped): $(basename $f)/$NEWFILENAME" >&2
        continue
    fi
    if [ "$(basename $f)" != "$NEWFILENAME" ]; then
        echo "\`$f' -> \`$NEWFILENAME'"
        mv -i "$f" "$NEWFILENAME"
    fi
done

Запускать в консоли

$ ./t.sh FILENAME

Для того чтоб транслитерировать множество файлов в директории можно задать так:

$ find . -iname "*.jpg" -exec ./t.sh {} \;

Данная команда будет искать файлы с расширением jpg и отправлять в наш скрипт.

t.tar (3 КБ)

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

Содержимое данного поля является приватным и не предназначено для показа.
  • HTML-теги не обрабатываются и показываются как обычный текст
  a88888b.  dP    dP  dP  .d88888b   888888ba  
d8' `88 Y8. .8P 88 88. "' 88 `8b
88 Y8aa8P 88 `Y88888b. 88 88
88 88 88 `8b 88 88
Y8. .88 88 88 d8' .8P 88 .8P
Y88888P' dP dP Y88888P 8888888P

Введите код, изображенный в стиле ASCII-арт.