LINUX.ORG.RU
ФорумAdmin

Ограничение на название файла

 


0

1

При переносе файла с windows в linux столкнулся с проблемой при копировании, слишком длинное имя файла (файловая система ext4), можно каким либо образом обойти данное ограничение? При том если бы данный файл был один можно было бы переименовать, но таких файлов больше 500, и как бы не вариант.



Последнее исправление: frost114 (всего исправлений: 1)

Это одна из наболевших проблем.

VFS уже поддерживает более длинные имена, но во многих ФС всё ещё однобайтная длинна. Если надо имена и не использовать виндовые ФС, то можно попробовать другие FUSE ФС, или «починить» ReiserFS в ядре.

boowai ★★★★
()

Можно переименовать все файлы однострочным скриптом.

Xenius ★★★★★
()
Последнее исправление: Xenius (всего исправлений: 1)

а) вместо ext4 используй reiserfs, б) вместо хрюникода поставь однобайтную локаль.

Ну, а можно на лету переименовать в транслит:

cat ~/bin/rename_translit
#!/bin/sh
# this script has been written by Eddy 
#
#               rename_translit --- переводит русские имена файлов в транслит
#
# Создан 22-го Май 2006 года в  9:24
#
rmspaces
for Name in `ls -1`
do
    Newname=`echo "$Name"|enconv|sed -e \
    "y/йукенгзхъфывапролдэсмитьбЙУКЕНГЗХЪФЫВАПРОЛДЭСМИТЬБ/jukengzh'fyvaproldesmit'bJUKENGZH'FYVAPROLDESMIT'B/"\
    -e "s/ц/tz/g"       \
    -e "s/ш/sh/g"       \
    -e "s/щ/sch/g"      \
    -e "s/ж/zh/g"       \
    -e "s/ч/ch/g"       \
    -e "s/ю/yu/g"       \
    -e "s/я/ya/g"       \
    -e "s/ё/yo/g"       \
    -e "s/Ё/YO/g"       \
    -e "s/Ц/TZ/g"       \
    -e "s/Ш/SH/g"       \
    -e "s/Щ/SCH/g"      \
    -e "s/Ж/ZH/g"       \
    -e "s/Ч/CH/g"       \
    -e "s/Ю/YU/g"       \
    -e "s/?/_/g"        \
    -e "s/Я/YA/g"`
    if [ "$Name" != "$Newname" ]; then
        mv "$Name" "$Newname"
        echo -e "$Name   ->    $Newname                             \r\c"
    fi
    if [ -d "$Newname" ]; then
    cd "$Newname" 2>/dev/null
        if [ $? == 0 ]; then
                echo -e "\n\nDiving into $Newname"
                rename_translit
                cd ../
        fi
    fi
done
Функция rmspaces заменяет все пробелы на символы подчеркивания.

А вообще, лучше никогда не использовать в именах файлов запрещенные символы (спецсимволы и символы вне таблицы ASCII).

anonymous
()

Если это плановый переезд, список файлов «в зубы» юзверам и нехай переименовывают. Но обязательно со сроком, типа «кто не спрятался я не виноват».

anc ★★★★★
()

Имена файлов, очевидно, в кириллице. В таком случае однобайтная локаль, например KOI8-R, позволяет увеличить лимит на количество символов в именах файлов, поскольку лимит на имена файлов именно в байтах, а не в символах.

saahriktu ★★★★★
()
Ответ на: комментарий от boowai

А в венде когда длинные пути сделают? Или это надо включит совместимость нтфс (это там где имена пара символов капсом с тильдой) чтобы оно нормально воспринимало? МС рекомендует не включать из-за проблем с производительностью.

anonymous
()
Ответ на: комментарий от anonymous

Про тильду не знаю, но у меня так и не получилось снять ограничение в 260 символов по их статье в KB. Проводник и многие другие программы так и переставали работать с объектами за 260. А если для каких-то программ ограничение и снялось.. Поэтому файлы массово я всегда двигаю через 7-zip, чтобы неожиданно ошибка не вылезла.

boowai ★★★★
()
Ответ на: комментарий от anonymous

Вендузятники должны стадать.

Но страдают тут Linux'оиды со своим обрезанным короткопутём в 4К байт.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Можно подумать, у вантузятников путь не 4кБ ограничен...

А уж про максимальную длину имени файла вообще не надо байки рассказывать: она у всех равна 255 символам. Но любители хрюникода должны страдать, поэтому у них длина имени в самых печальных случаях составляет всего-то 63 символа!

anonymous
()
Ответ на: комментарий от anonymous

а) вместо ext4 используй reiserfs

Одной ФС тут не обойдёшься.

AS ★★★★★
()

можно каким либо образом обойти данное ограничение?

Я тут когда-то давно постил уже ссылку
http://wiki.etersoft.ru/Linux/VLFN

AS ★★★★★
()
Ответ на: комментарий от EXL

Но страдают тут Linux'оиды со своим обрезанным короткопутём в 4К байт.

На самом деле не страдают - нет привычки «Войну и мир» умещать в имя файла. :-)

AS ★★★★★
()

в исходниках linux есть limits.h, где есть такие строки

#define NAME_MAX         255	/* # chars in a file name */
#define PATH_MAX        4096	/* # chars in a path name including nul */
post-factum, ты же успешно менял, или оно для ext4 не применяется?

liberty1
()
Ответ на: комментарий от anonymous

Незнаю что получится из смены локали, тут ведь все завязано на 1с с postgresql - а там utf8, или одно с другим не зависят, но не уверен. Да и если менять тип файловой системы все отформатируется - эх а всплыло это все, когда уже все настроено и из-за такого все.

frost114
() автор топика
Ответ на: комментарий от frost114

Бить по рукам юзверей, а для копирования файлов завести скрипт, который будет на лету заменять запрещенные символы, преобразовывать имя в транслит и обрезать его по первым 40 символам (чтобы имя хотя бы в две колонки в монитор влезало).

anonymous
()
Ответ на: комментарий от anonymous

Функция rmspaces заменяет все пробелы на символы подчеркивания.

Мдэ. Делов то поменяйть s/?/_/g на s/[[:space:]?]/_/g

vodz ★★★★★
()
Ответ на: комментарий от liberty1

Умничка. Осталось поменять для каждой из фс в ядре и для всех утилит каждой из фс в юзеоспейсе. И не надо забывать про кучу малу gvfs, udisk и прочих прочих прочих...

anonymous
()
Ответ на: комментарий от anonymous

Только страдать в данном случае приходится линуксоидам :)

Лал а ничего что мне с reiser4 норм а вендузятнечки с чего то посасывают.

anonymous
()
Ответ на: комментарий от anonymous
list=/tmp/rmspaces.$$
ls -1 > $list

while read file
do
    new=`echo "$file" | sed "s/\ /_/g"`
    if [ "$new" != "$file" ]; then
	mv "$file" "$new"
	echo "$file  RENAMED INTO   $new"
    fi
    if [ "$1" = "-r" -a -d "$new" ]; then
        cd "$new"
	echo -e "\t\tDiving into $PWD"
        rmspaces -r
        cd ../
    fi
done < $list
rm $list
anonymous
()
Ответ на: комментарий от anonymous

вендузятнечки с чего то посасывают.

Ты так гворишь, как будто они это делают не в своё удовольствие. Они ж все специалисты по оральной гигиене.

anonymous
()
Ответ на: комментарий от anonymous

Ты их с гейосниками не путай. Вантузятники просто дерьмо жрут и причмокивают.

anonymous
()
Ответ на: комментарий от liberty1

Почитай сверху ссылку. И ещё Как увеличить лимит 255 символов на имя файла. Это не влияет на ядро, а на некоторые программы. В ядре давно этого ограничения нет, но во многих ФС там константа в байт. Точнее, для первых extfs, вроде, поле хоть и было однобайтное, дальше были неиспользуемые байты. Хотя можно было расширить поле, решили задействовать «лишние» байты под новые поля. reiserfs и raiser4 изначально имеют большие поля, но reisers, через некоторое время после принятия в ядро, пропатчили установив ограничение.

boowai ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.