Репозиторий Sisyphus
Последнее обновление: 1 октября 2023 | Пакетов: 18631 | Посещений: 37569173
en ru br
Репозитории ALT
S:0.2.0-alt1
5.1: 0.1.6-alt2
4.1: 0.1.6-alt2
4.0: 0.1.6-alt2
www.altlinux.org/Changes

Группа :: Работа с файлами
Пакет: enconvmv

 Главная   Изменения   Спек   Патчи   Исходники   Загрузить   Gear   Bugs and FR  Repocop 

#!/bin/sh
# a script to traverse a directory tree and convert
# file and directory names to target (current by default)
# charset, auto-guessing source charset given the language
# (c) 2006, Michael Shigorin <mike@altlinux.org>
# use freely

usage()
{
echo "A script to traverse a directory tree and convert" >&2
echo "file and directory names to target charset using" >&2
echo "source charset autoguesser (defaulting to locale's" >&2
echo "language and charset if none specified)"
echo >&2
echo "Usage: $0 [-L language] [-x charset] [-r] [-q] [<directory|file>]" >&2
echo " -L and -x take parameters just as enca(1)" >&2
echo " -r turns on recursion" >&2
echo " -q means quiet" >&2
exit 1
}

fatal()
{
echo $0: $* >&2
exit 1
}

process()
{
new="$(echo $1 | enca -L "$language" -x "$charmap" || failed="$1")"
[ -z "$new" ] && fatal "$1 results in EMPTY converted name!"
[ "$1" != "$new" ] && {
[ -e "$new" ] && {
echo "$0: $1 already exists with recoded name: $new, leaving as is" >&2
} || $wrapper mv "$verbose" "$1" "$new"
}
}

traverse()
{
[ -d "$1" ] && { obj=.; dir="$1"; } || { obj="$1"; dir=.; }
pushd "$dir" >/dev/null || return
ls "$obj" | while read i; do
[ ! -L "$i" -a -d "$i" -a -n "$recurse" ] && traverse "$i"
process "$i"
done
popd >/dev/null
}

### main()

TEMP=`getopt -l language:,charset:,recurse,notest,quiet,help -- +L:x:r:N:q:h "$@"` || usage
eval set -- "$TEMP"
eval `locale -k charmap` # $charmap is current charset
# alas, language code isn't that easy
[ -z "$LC_CTYPE" ] && eval `locale 2>/dev/null | grep ^LC_CTYPE`
language="`echo $LC_CTYPE | cut -c1-2`"
verbose="-v"
recurse=
wrapper="echo"
failed=

while :; do
case "$1" in
--) shift; break
;;
-L|--language) shift; language="$1"
;;
-x|--charset) shift; charmap="$1"
;;
-r|--recurse) recurse=1
;;
-N|--notest) wrapper=
;;
-q|--quiet) verbose=
;;
-h|--help) usage
;;
*) [ -e "$1" ] && break || fatal "Unrecognized option: $1"
;;
esac
shift
done

[ -z "$language" ] && fatal "need -L language, unable to guess from locale"
[ -z "$charmap" ] && fatal "need -x charset, unable to guess from locale"

[ -n "$1" ] && {
[ -e "$1" ] && traverse "$1" || fatal "$1 not found"
} || usage

[ -n "$wrapper" -a -z "$failed" ] && echo "seems good, now run me with --notest to actually rename"
[ -n "$failed" ] && fatal "$failed name failed to convert, please check"
 
дизайн и разработка: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
текущий майнтейнер: Michael Shigorin