LINUX.ORG.RU
ФорумTalks

Какой длины у вас имена файлов?

 , , ,


2

2

Вначале меня заинтересовал вопрос того, какие самые характерные длины команд, для этого я написал вот такое:

sh -c "find '${PATH//:/\' \'}' -mindepth 1 -maxdepth 1 -type f -executable -printf '%f\n'" | awk '{printf "%4u \t%s\n",length($0),$0}' | sort -n | uniq -cw4 | awk '{ t=int(log($1)/log(2)*2)+1;printf sprintf("%%%is%%0%id%%s\n",32-t,t),"","",$0}'
Такая сложная конструкция для find нужна чтобы работало и в zsh и при наличии в PATH путей с пробелами и прочими спецсимволами.

А вообще, можно ту же самую команду использовать и для файлов в любой файловой системе, например:

find / -xdev -type f -printf "%f\n" | awk '{printf "%4i \t%s\n",length($0),$0}' | sort -n | uniq -cw4 | awk '{ t=int(log($1)/log(2)*2)+1;printf sprintf("%%%ii%%0%ii%%s\n",32-t,t),"","",$0}'

-xdev тут нужен чтобы пропустить всякие /proc /sys и /dev.

Скрипты очень простые, думаю понятно как они работают и без объяснений.

Интересно, что самая характерная длина исполнимого файла-команды — 7 или 8 символов.

★★★★★

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

воу. 42 теперь я знаю и вопрос. ( ответ на уточняющий вопрос будет mate-display-properties-install-systemwide )

bl ★★★
()
Последнее исправление: bl (всего исправлений: 1)
Ответ на: комментарий от pacify

вангую, что у тебя содержимое файлов тоже хранится в байтах

r0ck3r ★★★★★
()
                 000000000000000    122    1    [
            00000000000000000000    595    2    01
            00000000000000000000    644    3    3b1
          0000000000000000000000   1309    4    0.MT
       0000000000000000000000000   3846    5    10.pl
      00000000000000000000000000   4730    6    00main
     000000000000000000000000000   6818    7    01-test
    0000000000000000000000000000   8629    8    10000.pl
    0000000000000000000000000000  10100    9    00_header
    0000000000000000000000000000  10337   10    0e4015b9.0
    0000000000000000000000000000  10793   11    00gnulib.m4
    0000000000000000000000000000  10246   12    00Index.html
     000000000000000000000000000   8009   13    00_README.txt
     000000000000000000000000000   7462   14    00000-0007F.el
     000000000000000000000000000   6220   15    001-getopt.phpt
      00000000000000000000000000   5718   16    10-autohint.conf
      00000000000000000000000000   4741   17    10-wpa_supplicant
       0000000000000000000000000   3974   18    01_compress_easy.c
       0000000000000000000000000   3297   19    05-udev-early.rules
       0000000000000000000000000   2955   20    03_compress_custom.c
        000000000000000000000000   2465   21    04_compress_easy_mt.c
        000000000000000000000000   2246   22    10-sub-pixel-vbgr.conf
         00000000000000000000000   2032   23    11-lcdfilter-light.conf
         00000000000000000000000   1700   24    11-lcdfilter-legacy.conf
         00000000000000000000000   1588   25    11-lcdfilter-default.conf
          0000000000000000000000   1419   26    10-scale-bitmap-fonts.conf
          0000000000000000000000   1266   27    60-persistent-storage.rules
          0000000000000000000000   1157   28    adapt_assoc_struct_named.hpp
          0000000000000000000000   1125   29    75-cd-aliases-generator.rules
           000000000000000000000    995   30    accept_indented_paragraph-i.ri
           000000000000000000000    867   31    active_process_controllers-c.ri
           000000000000000000000    779   32    20-bluetooth-vendor-product.hwdb
            00000000000000000000    693   33    75-persistent-net-generator.rules
             0000000000000000000    464   34    advanced-windows-installation.html
             0000000000000000000    430   35    active_state_switching_policies.hpp
             0000000000000000000    372   36    base_subprocess.cpython-36.opt-1.pyc
              000000000000000000    265   37    aligned_allocator_adaptor_forward.hpp
              000000000000000000    259   38    attempt_to_activate_existing_spec-i.ri
               00000000000000000    206   39    audioop.cpython-36m-x86_64-linux-gnu.so
           000000000000000000000    784   40    00BC40393A19B0CD0BB0465AD2E72EF35B7A2A63
                0000000000000000    134   41    Automatic,_periodic_and_timed_events.html
                 000000000000000    118   42    cdesc-HTTPNetworkAuthenticationRequired.ri
                 000000000000000    104   43    9E51EBB4C9A2A5809AD68A2B04F803024ADD65F9.so
                  00000000000000     64   44    13BE45929C476924D7B20B1215FDF2484004756A.dll
                   0000000000000     48   45    3830d5c3ddfd5cd38a049b759396e72e-le64.cache-4
                   0000000000000     50   46    BFAFFB1B821C85FAD6C20DF97C6AFFECBEA65A43.dylib
                    000000000000     40   47    CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION.rst
              000000000000000000    359   48    00BC40393A19B0CD0BB0465AD2E72EF35B7A2A63.repo-id
                    000000000000     33   49    CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY.rst
                      0000000000     20   50    cc_hash_max_collision_check_resize_trigger_imp.hpp
                      0000000000     19   51    CosFileTransfer_CommandNotImplementedException.beam
                       000000000     14   52    CosNotifyChannelAdmin_ConnectionAlreadyInactive.beam
                      0000000000     21   53    CosNotifyChannelAdmin_StructuredProxyPullConsumer.erl
                        00000000     11   54    CosNotifyChannelAdmin_StructuredProxyPullConsumer.beam
                       000000000     13   55    Command,_filename_and_directory_stack_substitution.html
                        00000000      9   56    Perl::Critic::Exception::Configuration::Option::Global.3
                        00000000     10   57    Perl::Critic::Policy::BuiltinFunctions::ProhibitVoidMap.3
                          000000      5   58    Perl::Critic::Policy::BuiltinFunctions::ProhibitVoidGrep.3
                          000000      4   59    Perl::Critic::Exception::Configuration::NonExistentPolicy.3
                        00000000      8   60    Perl::Critic::Policy::ControlStructures::ProhibitDeepNests.3
                       000000000     13   61    gsf-Reading-and-Writing-from-local-files-and-directories.html
                       000000000     15   62    CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs.cmake
                          000000      4   63    Perl::Critic::Policy::ControlStructures::ProhibitUnlessBlocks.3
                          000000      5   64    Perl::Critic::Policy::BuiltinFunctions::ProhibitSleepViaSelect.3
                       000000000     12   65    Perl::Critic::Policy::BuiltinFunctions::ProhibitComplexMappings.3
                        00000000      9   66    Perl::Critic::Policy::BuiltinFunctions::ProhibitReverseSortBlock.3
                            0000      2   67    Perl::Critic::Policy::Documentation::RequirePackageMatchesPodName.3
                          000000      5   68    Perl::Critic::Policy::ValuesAndExpressions::ProhibitComplexVersion.3
                         0000000      7   69    Perl::Critic::Policy::InputOutput::RequireBracedFileHandleWithPrint.3
                           00000      3   70    Perl::Critic::Policy::RegularExpressions::ProhibitCaptureWithoutTest.3
                           00000      3   71    Perl::Critic::Policy::ErrorHandling::RequireCheckingReturnValueOfEval.3
                          000000      5   72    Perl::Critic::Exception::Configuration::Option::Global::ExtraParameter.3
                           00000      3   73    Perl::Critic::Policy::RegularExpressions::ProhibitEscapedMetacharacters.3
                            0000      2   75    Perl::Critic::Policy::ValuesAndExpressions::ProhibitMixedBooleanOperators.3
                              00      1   76    Perl::Critic::Policy::ValuesAndExpressions::RequireQuotedHeredocTerminator.3
                           00000      3   77    Perl::Critic::Policy::ValuesAndExpressions::ProhibitInterpolationOfLiterals.3
                            0000      2   78    Perl::Critic::Policy::ControlStructures::ProhibitLabelsWithSpecialBlockNames.3
                            0000      2   79    Perl::Critic::Policy::TestingAndDebugging::ProhibitProlongedStrictureOverride.3
                              00      1   85    Perl::Critic::Policy::ValuesAndExpressions::ProhibitSpecialLiteralHeredocTerminator.3
                              00      1   89    Perl::Critic::Policy::ValuesAndExpressions::ProhibitQuotesAsQuotelikeOperatorDelimiters.3
                              00      1   96    Perl::Critic::Policy::ControlStructures::ProhibitNegativeExpressionsInUnlessAndUntilConditions.3
saahriktu ★★★★★
()
qtandroidextras-notification-android-sources-src-org-qtproject-example-notification-notificationclient-java.html


112 символов...

Deleted
()

сначала тему не прочитал и думал предложить посмотреть ТС-у в NAME_MAX.

В общем, обнаружил у себя копию чьего-то интернет магазина с канцелярским барахлом. В общем, вот такой файл с картинкой:

podstavka-dlya-ruchek-podstavka-dlya-ruchek-kruglaya-80-80-100mm-metallicheskaya-2110-03-a-2110-03-a-chernyy-x-96331_af4c60f1f2fee2d_800x600-100x100.jpg
152 символа

reprimand ★★★★★
()

7 или 8 символов

И это нормально. Писать длиннющие мессаги в имени — идиотизм.

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

17 букв (в холодной воде)

На плечо такие длинные имена файлов вешаешь когда делаешь часто open() и close()?

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

Нормальное распределение с выбросами в 40 и 48 символов — похоже что кэш файерфокса какой-нибудь.

А откуда у тебя столько однобуквенных имён? Почти всё в ascii ими занято. У меня эта хрень в groff зачем-то. Если убрать его, что-то остаётся?

time find / -xdev -type f -name '?' | grep -v /groff 

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

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

Дело в том, что в современных версиях Windows этот лимит куда больше, чем в Linux. Народ этим пользуется. И не говорите мне, что «ненужно». Нужно. Например:

«Заключение уполномоченной комиссии при председателе Центрального Зернохранилища Ямало-Татарского АО о признании распоряжения Президента Галактической Федерации №123/6-Ю утратившим силу по причине полного бессилия. Приложение 1 - технико-экономическое обоснование.xlsx».

Простенько и со вкусом.

А кетайцам еще труднее, ихние иероглифы вообще 3-4 байта занимают.

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

А откуда у тебя столько однобуквенных имён? Почти всё в ascii ими занято. У меня эта хрень в groff зачем-то.
Если убрать его, что-то остаётся?

/usr/share/poppler/cMap/Adobe-Japan1/H
/usr/share/poppler/cMap/Adobe-Japan1/V
/usr/bin/R
/usr/bin/L
/usr/lib/R/bin/exec/R
/usr/lib/R/bin/R
/bin/[
/bin/w
saahriktu ★★★★★
()
Ответ на: комментарий от Deleted

файлы с именами на русском языке, которые вообще не влезают в линуксовый лимит

Локаль KOI8-R решает эту проблему, хоть и до определённого предела.

> touch Заключение\ уполномоченной\ комиссии\ при\ председателе\ Центрального\ Зернохранилища\ Ямало-Татарского\ АО\ о\ признании\ распоряжения\ Президента\ Галактической\ Федерации\ No.123\ 6-Ю\ утратившим\ силу\ по\ причине\ полного\ бессилия.\ Приложение\ 1.xlsx
> ls З*
Заключение уполномоченной комиссии при председателе Центрального Зернохранилища Ямало-Татарского АО о признании распоряжения Президента Галактической Федерации No.123 6-Ю утратившим силу по причине полного бессилия. Приложение 1.xlsx
> echo "$LANG"
ru_RU.KOI8-R
>

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

Чота у меня такое палево в самых длинных именах файлов.

Ну так никто же не заставляет показывать. А что насчёт первого варианта скрипта, который ищет только в $PATH?

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

Хотя самое длинное имя у вполне невинного файла:

09. Vivaldi - Four Seasons Concerto RV.297, L'inverno (Winter), (No. 4 in F minor, Op. 8, 1st movement, allegro non molto. Performed by Saint Luke Chamber Orchestra).mp3

169 символов

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

Вообще смысл команды был в основном чтобы найти, какая длина имени самая характерная. Для этого даже сбоку гистограмма рисуется, чтобы видеть распределение. Пока для команд получается 7 или 8 (на разных машинах), для файлов вообще около 10. Разница, кстати объясняется отсутствием расширения у файлов в /bin.

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

R - a language for data analysis and graphics
L:

Little is a compiled-to-byte-code language that draws heavily from
C and Perl.  From C, Little gets C syntax, simple types (int, float,
string), and complex types (arrays, structs).  From Perl, Little gets
associative arrays and regular expressions (PCRE).  And from neither,
Little gets its own simplistic form of classes.

The name "Little", abbreviated as simply "L", alludes to the language's
simplicity.  The idea was to distill the useful parts of other languages
and combine them into a scripting language, with type checking,
classes (not full-blown OO but useful none the less), direct access to
a cross-platform graphical toolkit, and a library drawn from Perl and
the standard C library.

L is built on top of the Tcl/Tk system.  The L compiler generates Tcl byte
codes and uses the Tcl calling convention.  This means that L and Tcl code
may be intermixed.  More importantly, it means that Little may use all
of the Tcl API and libraries as well as TK widgets.  The net result is a
type-checked scripting language which may be used for cross-platform GUIs.

Little is open source under the same license as Tcl/TK (BSD like) with
any bits that are unencumbered by the Tcl license also being available
under the Apache License, Version 2.0.

Little is based on interim Tcl and Tk releases

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

Не знал о таком. И как тебе?

Впрочем не понимаю, зачем, если есть обычный Tcl/Tk с более приятным синтаксисом.

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

Лорчую
Из-за этого приходится, например, чтобы скачать торрент, создавать файл с ntfs, монтировать его и качать туда.
Потому что у нормальных людей в файловой системе стандарт 255 юникодных символов, а у нас как с железнодорожными рельсами, сделать так, лишь бы не как у них!

TheAnonymous ★★★★★
()

Такая сложная конструкция для find нужна

Скрипты очень простые

Простые сложные скрипты, понял тебя.

Топ:

62886 40 00016714366650A4D5407E2539A81F9F430B2B77

Максимальная длина у меня 239.

orm-i-auga ★★★★★
()
Ответ на: комментарий от orm-i-auga

Это у тебя кэш файерфокса какой-нибудь. А если не считать кэш фокса, то какой максимум?

Xenius ★★★★★
() автор топика
Ответ на: комментарий от Xenius
00000000000000000000000000000000  34008    8    00000000
 0000000000000000000000000000000  31163    9    00_header
 0000000000000000000000000000000  32441   10    000003.log
00000000000000000000000000000000  34153   11    00powersave
00000000000000000000000000000000  39222   12    _000000_.cat
00000000000000000000000000000000  41657   13    00changelog.d
 0000000000000000000000000000000  28600   14    00000-0007F.el
 0000000000000000000000000000000  26769   15    008_Celesta.pat
 0000000000000000000000000000000  25336   16    000kernel-change
 0000000000000000000000000000000  28793   17    000000_000000.jpg
00000000000000000000000000000000  40295   18    000530ab0b332b94_0
orm-i-auga ★★★★★
()
Ответ на: комментарий от orm-i-auga

Похоже, что у тебя имена файлов длинней чем в среднем по больнице.

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

чтобы скачать торрент, создавать файл с ntfs, монтировать его и качать туда

У вас это работает?!

Разве нет ограничения длины файла на уровне VFS?

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

Потому что у нормальных людей в файловой системе стандарт 255 юникодных символов, а у нас как с железнодорожными рельсами, сделать так, лишь бы не как у них!

Справедливости ради: майкрософт вообще был и есть лидер по внедрению юникода. Несмотря на америкоцентричность, как и у всех.

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

Работает, создаю пустой файл с нулями dd, на нём mkfs.ntfs, и на эту ФС качается. По крайней мере, с ktorrent

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

Иногда длиннющие сообщения в имени файла необходимы для быстрого ориентирования по ФС.

Quasar ★★★★★
()

Скрипты очень простые, думаю понятно как они работают и без объяснений.

О, в этом весь линукс! Поставить генту можно тремя командами... (листинг на полэкрана) это первая...

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

Справедливости ради: майкрософт вообще был и есть лидер по внедрению юникода.

Да, конечно. И именно поэтому юникод в консоли винды не поддерживается без костылей в коде пользовательской программы, которые к тому же не всегда спасают если она взаимодействует со встроенными командами винды.

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

юникод в консоли винды не поддерживается без костылей

А в консоли винды вообще что-то поддерживается?..

Зато у них файловая система позволяет делать длинные имена файлов юникодицей. И мне очень-очень хочется видеть эту возможность в Линуксе.

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

До 255 байт в UTF-8. Куда уж больше-то?

Это совсем немного - всего 127 русских букв.

В Windows 7 и новее можно делать более длинные имена файлов. Выше уже приводились примеры, зачем это нужно. Люди пользуются этой возможностью, и уже возникают ситуации, когда их файлы мы не можем скопировать (с флешки или по сети), не переименовав.

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

В PowerShell юникод. А остальные консольные утили винды - лютое легаси, которое поддерживается по остаточному принципу, если вообще поддерживается.

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