LINUX.ORG.RU

выделить расширение файла


0

2

всем доброго.

нужен способ выделить расширение из имени файла. в гугле нашел такой способ:

filename=$(basename "$file")
fileext=${filename##*.}

по проблема в том, что выделяется только последняя часть, после последней точки. т.е. из «file.tar.gz» выделяется «gz»

подскажите, как правильно сделать?

благодарен.

★★★

>по проблема в том, что выделяется только последняя часть, после последней точки. т.е. из «file.tar.gz» выделяется «gz»

В чём проблема? Это и есть расширение.

Если же надо убрать всё до первой точки, то вместо ## пиши #.

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

проблема в том, что хочется чтоб из «file.txt» выделялось «txt», а из «file.tar.gz» выделялось «tar.gz» :)

niXman ★★★
() автор топика

echo «$filename» | sed 's/^[a-zA-Z0-9а-яА-Я]*\.//'

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

если для этого варианта передать имя файла в котором еще и версия присутствует, то и она выделяется.

к примеру из «file-1.14.tar.gz» получим ".14.tar.gz"

как быть?

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

тут наверное одним вариантом не обойтись. нужно проверять кол-во точек, и если их две и более - извлекать только две, иначе одну.

niXman ★★★
() автор топика

Во-первых, нет такого слова «расширение». Часть имени после точки называется суффиксом. И суффиксов может быть несколько. Если нужен только последний, то sed'ом проще всего выделить:

echo $Filename | sed 's/.\{1,\}\.//g'| tr '[:upper:]' '[:lower:]'

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от niXman

И что будет в случае «file-1.14.tar»?

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

Что «это»?

A filename extension is a suffix (separated from the basefilename by a dot) to the name of a computer file applied to indicate the encoding (file format) of its contents or usage.

Общее определение термина, OS-agnostic. DOS не упоминается.

Some filesystems limit the length of the extension (such as the FAT file system not allowing more than three characters) while others (such as NTFS) do not. Unix filesystems accept the separator dot as a legal character.

Замечание, в котором упоминаются файловые системы Unix-like осей.


Просто признай, что у тебя ДИРЕКТОРИЯ головного мозга.

anonymous
()

Ещё вариант:

$ echo "file.tar.gz" | perl -e '$file=<stdin>;$fileext = substr($file,index($file,".",)+1);print $fileext;'
tar.gz
$ echo "файл.исо.рар.гз" | perl -e '$file=<stdin>;$fileext = substr($file,index($file,".",)+1);print $fileext;'
исо.рар.гз
$ echo "data.xz" | perl -e '$file=<stdin>;$fileext = substr($file,index($file,".",)+1);print $fileext;'
xz

saahriktu ★★★★★
()

тащемта правильно определять MIME тип, а потом уже откусывать по нему екстеншн.

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

ну проверяйте. тут одним регекспом не обойтись, вам скрипт на sed написать? ИМХО практической пользы в нём нет.

drBatty ★★
()

и да, откройте же для себя команду file

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

> проблема в том, что хочется чтоб из «file.txt» выделялось «txt», а из «file.tar.gz» выделялось «tar.gz» :)

А из файла filename.program.text.2011.11.24.log.tar.gz ?

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

>А также в интернеты не ходить и гугл не использовать? Ну-ну.

что ну-ну? Есть постфиксная часть имени, проще говоря в конце файла. Но она вовсе необязательно начинается с точки и точек не содержит. И совсем не обязательно говорит о типе файлов. Посмотрите на многотомные архивы например. Это только в венде так.

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

> И совсем не обязательно говорит о типе файлов.
То, что суффикс не говорит о типе файла, всего лишь означает, что он не является расширением.
Если суффикса нет, то и расширения нет, что тоже вполне нормально, так как нигде не сказано в определении, что имя файла обязано его иметь.
Там сказано всего лишь, что суффикс (отделенный точкой), который говорит о типе файла, называется «расширением имени файла».

Возможно, с примером тебе будет проще понять о чем речь.
Я возьму файл из моей генты - «gzip.py», который валяется в где-то /usr/lib/python2.7:
1. У этого файла есть суффикс, отделенный точкой? Имеется, «py».
2. Этот суффикс говорит о типе файла? Говорит.
Откуда следуют, что он по определению является расширением имени файла.
И после этого ты будешь утверждать, что они бывают только венде?

Возможно, конечно, что ты не согласен с таким определением, но в таком случае будь добр, приведи ссылку на корректное.

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

>1. У этого файла есть суффикс, отделенный точкой? Имеется, «py». >2. Этот суффикс говорит о типе файла? Говорит.
1. имеется.
2. не говорит. А лишь намекает.

Откуда следуют, что он по определению является расширением имени файла.

по ТВОЕМУ определению.

И после этого ты будешь утверждать, что они бывают только венде?

Да, конечно. По той простой причине, что та сущность, которую обычно воспринимают как «расширения» в венде, в линуксе отсутствует напрочь. Как известно, маздайщики обделены нормальной консолью, и нормальными ФМ, у них на всё про всё explorer.exe. А эта программа считает «расширением» последние символы имени после последней точки. И в соответствие с данным расширением отправляет файл при открытие в жёстко выбранное приложение. Вот _такой_ сущности в линуксе не было, нет, и я надеюсь уже не будет.

Возможно, конечно, что ты не согласен с таким определением, но в таком случае будь добр, приведи ссылку на корректное.

Я вообще считаю, что узнавать тип файла по его имени - ненадёжно, и вообще Must Die. Можно воспользоваться например расширенными атрибутами. ИМХО, «Месячный отчёт за январь» куда как аккуратней и осмысленней, чем «Месячный отчёт за январь.ODT». Скрывать расширения - жуткий маздайный костыль, но тип определять таки надо. И у нас есть для этого механизм - xattr, там можно хранить тип файлов, что-бы знать, какой программой это всё надо открывать.

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

> 2. не говорит. А лишь намекает.
В венде тоже «лишь намекает». Никто не мешает мне поменять .doc на .py в отдельном имени файла. Это везде так, линупс тут особенным не является. Так что таки «говорит», насколько оно может говорить.

по ТВОЕМУ определению.

Не по моему, а по определению из Вики. Ты же так и не привел «СВОЕГО».

По той простой причине, что та сущность, которую обычно воспринимают как «расширения» в венде, в линуксе отсутствует напрочь.

Мой пример показывает обратное, но ты закрыл на него глаза. Хотя это зависит от определения, лично я воспринимаю так, как написано в Вике, думаю, что и большинство других людей так же воспринимают. У тебя, похоже, какое-то свое особое восприятие.

Вот _такой_ сущности в линуксе не было, нет, и я надеюсь уже не будет.

Я вообще считаю, что узнавать тип файла по его имени - ненадёжно, и вообще Must Die.


Не относится к теме дискуссии. Речь не про то, как часто расширения используются или не используются программами, и даже не про надежность этих суффиксов.
Есть термин, который описывает конкретную вещь, и независимо от твоего восприятия, в линупсах есть сущности, которые попадают под это описание.

Кстати, некоторые утилиты по умолчанию отказываются работать с файлами с неправильным расширением, gzip в качестве примера:
gzip: file.hz: unknown suffix — ignored

Пока ты не приведешь «корректного» определения, спорить дальше смысла не имеет. Разумеется я ожидаю ссылку на «надежный» источник.

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

>Не по моему, а по определению из Вики. Ты же так и не привел «СВОЕГО».

вике я не доверяю, и особенно по части определений. А своё «определение» я уже привёл: нет никаких расширений. Не, конечно если у фалов есть что-то общее, то можно им дать какие-нить особые имена, и парсить имена легче, если «особость» в конце. Но вот чем там разделять, и что там брать - каждый решает сам. Или сами, если группа людей делает одно дело. Что мы и наблюдаем. По этой причине создать универсальный регексп невозможно, он будет постоянно фэйлится. Можно создать только регексп для известной группы файлов, да и то, нет гарантии, что он не сломается.

Мой пример показывает обратное, но ты закрыл на него глаза.

потому-что это всего-лишь один, частный, и не очень таки распространённый вариант.

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

в том-то и дело, что люди, знакомые с понятиями «папка», «расширение» переносят эти простые и понятные слова и в Linux. ВНЕЗАПНО выясняется, что исключений у этих терминов больше чем правил - расширения например часто дают разные, или не дают их вовсе. И всем - пофиг. Захотел один - назвал архив a.txz, а другой a.tar.xz, а третий так вообще tar+xza. У людей жесточайщий баттхёрт - как-же, да этого быть не может! Но это так.

Есть термин, который описывает конкретную вещь, и независимо от твоего восприятия, в линупсах есть сущности, которые попадают под это описание.

утверждение: «Все бабы бл*и». IRL полно сущностей, которые попадают под это правило. Ну и что?

Кстати, некоторые утилиты по умолчанию отказываются работать с файлами с неправильным расширением, gzip в качестве примера:

gzip: file.hz: unknown suffix — ignored

мимо кассы. Дело в том, что у gzip'а есть замечательная багофича - он не только разжимает файл, но и откусывает его суффикс. В данном случае, непонятно что откусывать. если эту багофичу отключить (например направить вывод в консоль), то gunzip -c вместе с zcat радостно набросятся на файл.

Пока ты не приведешь «корректного» определения, спорить дальше смысла не имеет. Разумеется я ожидаю ссылку на «надежный» источник.

именно это я и объяснял ТС'у - нет никакого валидного определения расширений, а следовательно мы их никак не сможем фильтровать. Хотя в частных случаях, как с gzip'ом - очень даже и можем. Но это относится _только_ к gzip'у.

И да, в Slackware Linux less умеет читать *.gz файлы, самостоятельно их распаковывая. Казалось-бы, отличный пример! АВХ! В CentOS less такого не умеет, и нужно использовать спецверсию zless. Как видишь, все эти расширения иллюзорны и ненадёжны. Они надёжны лишь покуда ты их сам рисуешь.

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

Без шуток, на полном серьёзе. У меня и таких, и таких файлов найдётся немало.

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

Поучаствую и я в срачике.

По той простой причине, что та сущность, которую обычно воспринимают как «расширения» в венде, в линуксе отсутствует напрочь.

Расскажи это, например, gcc, ок? По-твоему, мне каждый раз при компиляции/других действиях с исходным кодом надо указывать, какого же типа исходный код? Нет, спасибо, я лучше один раз файл назову.

Я вообще считаю, что узнавать тип файла по его имени - ненадёжно, и вообще Must Die.

Хорошо, как ты предлагаешь определять тип файла?

Как file, по сигнатурам? Это не оптимально, сигнатур может быть много, проверять каждую - куча времени уйдёт; а если у меня _много_ файлов, и мне для каждого тип надо определить?

Хранить расширенный атрибут? Чем это лучше расширений?

Тем, что расширение ненадёжно, легко можно изменить? С расширенными атрибутами так же.

Тем, что якобы название без расширения более осмысленно? Не гони пургу, я - не компьютер, не могу одним взглядом на файл прочитать заодно расширенные атрибуты. А вот если в названии есть расширение, то мне сразу ясно, где тут odt, где тут txt, а где картинки.

Более того, ты не рассматриваешь ситуацию, когда в одном месте лежат файлы с одинаковыми названиями, но разными расширениями. Что в этом случае делать будешь?

Ну и последнее, давай не будем забывать, что винда есть, нравится это тебе или нет, и обмениваться с ней файлами тоже необходимо. А она ничего не знает про расширенные атрибуты, что с ней прикажешь делать?

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

> вике я не доверяю, и особенно по части определений.
А я тебе не доверяю.

А своё «определение» я уже привёл

Я просил привести ссылку на надежный источник, ты таковым не являешься.

нет никаких расширений

Но термин-то есть, и люди, включая тебя, вкладывают в него какой-то смысл. «Нет никаких расширений» не является значением термина «расширение имени файла».

потому-что это всего-лишь один, частный, и не очень таки распространённый вариант.

С логикой проблемы? Для того, чтобы доказать существование чего-то, достаточно привести всего один пример (хотя я мог бы показать куда больше).

утверждение: «Все бабы бл*и». IRL полно сущностей, которые попадают под это правило. Ну и что?

О боги! Ну почитай ты уже какой-нибудь учебник по логике, это первый курс любой вменяемой специальности.
Я доказывал утверждение «Существует x из X, такое что выполняется P», а не «Для любого x из X выполняется P».
Чтобы _доказать_ существование, нужно привести пример, где P выполняется (всего один!).
Утверждение в твоей убогой аналогии попадает под второй случай, и одним примером, где выполняется !P (т.е найти «не шлюху»), его можно _опровергнуть_.

именно это я и объяснял ТС'у - нет никакого валидного определения расширений, а следовательно мы их никак не сможем фильтровать.

Определение (в смысле «значение») есть (и судя по всему, ты им даже пользуешься, хоть и пытаешься это отрицать), нет способа определить.
Но то, что нет никакого валидного способа определить расширение файла, не означает, что их не существует. Более того, это вообще не имеет значения.
Еще раз повторяю, я доказывал (и доказал) «расширения существуют», а не «у каждого имени файла имеется расширение, и существует достоверный способ его определить».

Хотя в частных случаях, как с gzip'ом - очень даже и можем. Но это относится _только_ к gzip'у.

Чтобы доказать «не существование» расширений, тебе нужно было показать, что во всех возможных случаях у имени файла нет расширения, вместо того чтобы приводить некорректные аналогии, плакаться о вендопроблемах и рассказывать про то, что нет способов валидного определения.
Но ты уже согласился, что частные случаи существуют, чем и подтвердил утверждение о существовании ;)
И на этом мне пора закончить комментировать твое неосиляторство логики.

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

>Расскажи это, например, gcc, ок? По-твоему, мне каждый раз при компиляции/других действиях с исходным кодом надо указывать, какого же типа исходный код? Нет, спасибо, я лучше один раз файл назову.

зачем-же так грубо? Ну во первых, мы всегда можем написать gcc | g++ | g77 | etc, во вторых, я не призываю вот прямо сейчас взять, и закопать. Просто надо сменить своё отношение к суффиксам. Ну а в третьих, на выходе из gcc мы обычно получаем исполняемый файл, без всяких расширений, и тем не менее отлично работающий.

Как file, по сигнатурам? Это не оптимально, сигнатур может быть много, проверять каждую - куча времени уйдёт; а если у меня _много_ файлов, и мне для каждого тип надо определить?

почему-же не оптимально? подождёшь 0.1 секунды на определения фильма, который ты полчаса качал. Но я не предлагаю это делать каждый раз - тип файла должен в идеале передаваться вместе с файлам, как уже запиливают в Kademlia. Ну а на старых каналах - архивы и file. Как временные костыли.

Хранить расширенный атрибут? Чем это лучше расширений?

давай будем хранить инициалы автора в поле mtime? А чё, там 64 бита, всё равно никто не юзает с наносекундной точностью. Миллисекунд хватит всем!

Пойми, эти «расширения» - костыль со времён MS-DOS, если не раньше. Тогда да, надо было. Но не сейчас-же! Наши HDD не в силах сохранить пару десяток байт на файл? ФС не позволяет? Или что?

Имя - единая и не делимая сущность, мало того, она не имеет прямого отношения к содержимому файлов. Это просто ссылка, коих может быть сколько угодно, и не быть вовсе. Зачем туда пихать информацию о типе содержимого?! Это в досе было оправданно имя--содержимое. А у нас имена без сродержимого на диске (fifo), и файлы на диске со многими именами. Нету у нас такой связи уже. Уже лет так 30+.

Тем, что якобы название без расширения более осмысленно? Не гони пургу, я - не компьютер, не могу одним взглядом на файл прочитать заодно расширенные атрибуты. А вот если в названии есть расширение, то мне сразу ясно, где тут odt, где тут txt, а где картинки.

долго что-ли любимую ls и любимый ФМ подправить? Да и достало мну уже раскраска в ls & mc - сколько уже можно мой любимый *.xz не красить? (сейчас правда, хвала Патрегу, одумались)

Более того, ты не рассматриваешь ситуацию, когда в одном месте лежат файлы с одинаковыми названиями, но разными расширениями. Что в этом случае делать будешь?

в этой ситуации - оставлю как есть. Я что, запрещаю зать эти ваши расширения? Я что, Поттеринг? Не хочешь - не юзай. Сам же мне спасибо скажешь, когда твоя ls/mc/ФМ научится отличать скрипт от ELF'а.

Ну и последнее, давай не будем забывать, что винда есть, нравится это тебе или нет, и обмениваться с ней файлами тоже необходимо. А она ничего не знает про расширенные атрибуты, что с ней прикажешь делать?

закопать :) А если серьёзно - как есть оставить.

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

>А я тебе не доверяю.

заметь - а я и не предлагал никаких определений. Сам видишь - их нет.

Я просил привести ссылку на надежный источник, ты таковым не являешься.

факт отсутствия наличия определения чего-либо разве тебе ни о чём не намекает?

О боги! Ну почитай ты уже какой-нибудь учебник по логике

ну я кагбэ и пытаюсь тебе втолковать, что расширений, как это понимают в оффтопике - нет. Есть опциональный суффикс, который часто используют для того, что-бы показать даже не тип, а что это за файл вообще. К примеру *.h это хидер C, а вот *.hpp это, в отличие от него, хидер C++. А программам обработки на этот суффикс часто всё равно.

Т.о. «расширение» - это не правило, это древний костыль, который таскает с собой здоровый человек, потому-что привык. У него 20 лет назад нога была сломана. Так и ходит. Логично?

Еще раз повторяю, я доказывал (и доказал) «расширения существуют», а не «у каждого имени файла имеется расширение, и существует достоверный способ его определить».

Да без проблем. С т.з. формальной логики ты прав. Я ведь с самого начала признавал наличие в имени суффиксов. Мало того, согласился, что они удобнее в конце, мало того, согласился их точкой отделять - по традиции :) Да только тошно смотреть на файл.

xxx.sql.xz.gpg.asc.

И что ме с этим делать - без понятия...

Чтобы доказать «не существование» расширений

мы спорим о «ортогональных» понятиях. Ты мне доказываешь, что суффиксы бывают, а я тебе пытаюсь доказать, что эти суффиксы несут совершенно другой смысл, чем их обычно понимают. А то, что они имеют место быть - я и не спорю :)

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

зачем-же так грубо?

Грубости не подразумевалось, извини, если что-то показалось тебе оскорбительным.

Ну во первых, мы всегда можем написать gcc | g++ | g77 | etc

Ну как напишем, так и соснем в любом случае:

15:28:53 tia-laptop ~/Downloads/firefox
[ tia ] $ cat test
int main(){}
15:28:54 tia-laptop ~/Downloads/firefox
[ tia ] $ g++ test
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/../../../../x86_64-pc-linux-gnu/bin/ld:test: file format not recognized; treating as linker script
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/../../../../x86_64-pc-linux-gnu/bin/ld:test:1: syntax error
collect2: выполнение ld завершилось с кодом возврата 1
15:28:57 tia-laptop ~/Downloads/firefox
[ tia ] $ gcc test
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/../../../../x86_64-pc-linux-gnu/bin/ld:test: file format not recognized; treating as linker script
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.2/../../../../x86_64-pc-linux-gnu/bin/ld:test:1: syntax error
collect2: выполнение ld завершилось с кодом возврата 1

Чтобы заработало, надо ему сказать, что же за файл-то мы ему суём.

gcc -x c test

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

С этим не собираюсь спорить, тут не винда, чтобы «с .exe запускается, без .exe не запускается».

Пойми, эти «расширения» - костыль со времён MS-DOS, если не раньше.

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

почему-же не оптимально? подождёшь 0.1 секунды на определения фильма, который ты полчаса качал.

Предположим, я принёс винт с файлопомойкой, десять тысяч файлов, там и картинки, и музыка, и видео, и документы. Да пусть даже просто куча мелких картинок. Время определения типа файла по сигнатуре мало зависит от размера файла, сигнатуры-то мелкие, буквально несколько байт каждая, но их тоже много. Если по 0.1 секунды на каждый файл, то это больше пятнадцати минут выходит, зачем так жить?

Ну а на старых каналах - архивы и file. Как временные костыли.

То есть ты всё же предлагаешь разделить мир на две части - наш и их, в нашем светлое будущее наступило, расширений нет, а они - отсталые люди, все никак не поймут, что расширения не нужны. Соответственно весь софт, так или иначе связанный с передачей файлов, должен будет каждый раз делать проверку, а нужно ли расширение, или нет. Нет, спасибо, мне, пожалуй, текущее положение нравится.

давай будем хранить инициалы автора в поле mtime? А чё, там 64 бита, всё равно никто не юзает с наносекундной точностью. Миллисекунд хватит всем!

Я не понял, к чему ты это вообще сказал.

долго что-ли любимую ls и любимый ФМ подправить?

Как подправить-то? Как ты предлагаешь отображать тип файла? Картинкой? Дополнительно инфу отображать? А если мне компактность важна? Цветом? А если я листинг в файле просматриваю? Без костылей в любом случае не обойдётся.

Я что, Поттеринг? Не хочешь - не юзай.

Да я, слава богу, и поттеринговские творения использовать не спешу.

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

P.S. Ну и включая grammar nazi mode: [пробел]же, [пробел]ли, во-первых, во-вторых, в-третьих, etc.

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

> Ты мне доказываешь, что суффиксы бывают
Нет, я доказывал, что расширения бывают, то есть суффиксы с определенным смыслом.

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

Некоторые суффиксы несут тот самый смысл. Ты с этим не согласен?

А то, что они имеют место быть - я и не спорю :)

Начало спора:
Eddy_Em> нет такого слова «расширение».
me> Наглое 4.2! [ссылки на Вику]
ты> не читайте на ночь википедиков

Вообще, Eddy_Em, как я понял, утверждал, что в линупсах не используется такая терминология. То есть у него «директория» вместо «папки», «суффикс» вместо «расширения имени файла». Тем не менее «filename extension» можно увидеть, например, в файловом диалоге KDE.

Но ты пошел дальше него, и начал утверждать, что вообще нет таких суффиксов, которые говорят (или намекают) о типе файла:
me> И после этого ты будешь утверждать, что они бывают только венде?
ты> Да, конечно. По той простой причине, что та сущность, которую обычно воспринимают как «расширения» в венде, в линуксе отсутствует напрочь.

в линуксе отсутствует напрочь.

Но ведь я показал, что суффиксы имеются (с этим ты согласился), и я также показал, что часть из них несет информацию о типе файла (т.е. является тем, что воспринимают как «расширение» в венде), ты с этим тоже согласился (так как признал существование частных случаев, вроде gzip'а).

От каких именно своих слов ты отказываешься? =)

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

>P.S. Ну и включая grammar nazi mode: [пробел]же, [пробел]ли, во-первых, во-вторых, в-третьих, etc.

надо-же...

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

>Некоторые суффиксы несут тот самый смысл. Ты с этим не согласен?

согласен. Да, в некоторых случаях определение из вики верное.

Eddy_Em> нет такого слова «расширение».

me> Наглое 4.2! [ссылки на Вику]


ты> не читайте на ночь википедиков


правильно. Ибо тамошнее определение может и подходит для венды, но уж никак не для нормальной ОС. Ибо вендовое использование хвоста имени файла как признака типа далеко не всегда нужно, и далеко не всегда применяется.

В линуксе действительно нет такого _общего_ понятия как расширение. Есть частные - как изменение имени gzip'ом. Общие программы работают только с шаблонами и регулярками. (даже гуёвые, пример Thunar).

Ну и отсюда берутся фэйлы. Ну как например совет попробовать *.* в качестве шаблона для всех файлов. Или сабж - тоже хороший, годный пример. И никакая вика ситуацию не исправит. Разрабы coreutils не удосужились русских википедиков почитать. Такие дела.

То есть у него «директория» вместо «папки»

Каталог, имхо. Что действительно правильно. Ибо свойства обычного бумажного каталога ближе к каталогу из LFS. Например, вес каталога не зависит от веса того, что там включено, только от количества. Вес папки очевидно равен весу пустой папки+содержимое. А теперь наберите ls -l ~.

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


Есть. Но это не общее правило. И вообще не правило, а так - частный случай.

Но ведь я показал, что суффиксы имеются (с этим ты согласился), и я также показал, что часть из них несет информацию о типе файла (т.е. является тем, что воспринимают как «расширение» в венде), ты с этим тоже согласился (так как признал существование частных случаев, вроде gzip'а).

От каких именно своих слов ты отказываешься? =)



Я не отказываюсь. Между «расширением» и «частью имени» имеется принципиальная разница. Это общее правило в венде, если там расширения нет, то это невскрываемая НЁХ.
Напротив, в линуксе случай отсутствия всяких суффиксов - в порядке вещей. Также, как и применение их для каких-то иных целей. Я помнится там хранил crc32 файла.

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

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

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

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

Собственно, и чо? Открыл Америку? Точно такой же ручкой будет расширение, упиханное в xattr. Кстати, когда мы передаём файл, передаётся только его содержимое + обычно название, а xattrs - данные ФС, а не файла, hemorrhoids++.

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

> согласен. Да, в некоторых случаях определение из вики верное.
Я утверждаю, что определение из Вики верно для всех случаев, которые оно описывает.
Назови хотя бы один пример, когда это не так.

Ибо тамошнее определение может и подходит для венды, но уж никак не для нормальной ОС.

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

Между «расширением» и «частью имени» имеется принципиальная разница.

И не только принципиальная, это разные понятия. Но к чему это это было? Я разве утверждал обратное?

нет такого _общего_ понятия

Если перевести на русский язык, то получим «это понятие используется гораздо реже».

Но это не общее правило. И вообще не правило, а так - частный случай.

Это общее правило в венде


Забудь уже про распространенность, нужность и правила-шмарила.
Спор изначально был о существовании слова «расширение» в контексте линукса, причем никаких оговорок о распространенности не делалось.
Это слово существует, даже если оно, как ты утверждаешь, имеет иное значение, нежели то, что в венде (хотя значение одно для всех ОС, распространенность разная), используется в речи огромным количеством линуксоидов, используется линуксячьими программами, в том числе и значительными.
Я совершенно не понимаю, как можно утверждать, что его нет или что оно применяется только в досоподобных ОС.
Если ты ввязался в этот спор по ошибке, так и скажи.

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

>Оно не подходит ни для какой ОС, ибо описывает часть имени файла, а значит оно может подходить только для частей имен файлов. И может использоваться в любой ОС, где разрешена точка в названии файлов.

а если у файла нет имени? А если у него двадцать два имени?

И не только принципиальная, это разные понятия. Но к чему это это было? Я разве утверждал обратное?

да. Если определение подходит лишь под некое далеко неполное подмножество, то нельзя говорить о верности такого определения. Ну это как определение денег, как круглых металлических хреновин. Да, есть и такое. Ну и что?

Спор изначально был о существовании слова «расширение» в контексте линукса, причем никаких оговорок о распространенности не делалось.

Да ладно! У человека стоит задача «обработать _все_ файлы», он совершенно инстинктивно использует шаблон *.*, это-ли не яркий пример того, что большинство людей воспринимают расширение как нечто обязательное?

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

Я совершенно не понимаю, как можно утверждать, что его нет или что оно применяется только в досоподобных ОС. Если ты ввязался в этот спор по ошибке, так и скажи.

Та не... Этой социальной олимпиаде уже не первый год... Неправильный термин вреден тем, что он наделяет объект свойствами, которых у него нет. Это приводит к ошибкам и неоднозначностям. Это плохо.

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

>Собственно, и чо? Открыл Америку? Точно такой же ручкой будет расширение, упиханное в xattr.

разница есть - xattr связанно с файлом в единое тело. А имя - просто ссылка, которую легко оторвать и перенаправить куда угодно.

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

Ну ок, да, не совсем то же самое, имя хранится в папке, содержащей файл, xattrs - в иноде файла. Однако xattrs, ЕМНИП, unix fs-only, и тут мы приходим к тому, что я тебе уже говорил раньше - кроме различных никсов, есть как минимум винда, с которой это не прокатит, и как минимум из-за этого полностью от расширений ты не сможешь отказаться.

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

И, кстати говоря, всё же не в единое тело. Инод и данные - разные вещи.

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

>xattrs - в иноде файла

не влезет.

Однако xattrs, ЕМНИП, unix fs-only

ну... смотрите сами: http://en.wikipedia.org/wiki/Extended_file_attributes

и как минимум из-за этого полностью от расширений ты не сможешь отказаться.

есть таки getfattr -dump и setfattr --restore

На самом деле я и не считаю, что «xattr самое лучшее», не, в каждом случае своё решение.

И, кстати говоря, всё же не в единое тело. Инод и данные - разные вещи.

конечно разные. Вот только туда не влезят расширенные атрибуты. Там и так-то быдо жалких 128байт, теперь вот стало 256... Это только на имя столько нужно.

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

> а если у файла нет имени?
Нет имени - нет расширения, очевидно же.

А если у него двадцать два имени?

Какая разница сколько у файла имен? Термин применяется или не применяется к каждому отдельному имени файла, не имеет значения, что эти имена у одного файла или нет.

Если определение подходит лишь под некое далеко неполное подмножество, то нельзя говорить о верности такого определения.

Да легко. Постоянно так делают, к примеру, в той же математике.
Ты являешься подмножеством всех живых организмов, на тебя повесили ярлычок «человек», хотя «человек» подходит лишь под некое далеко неполное подмножество живых организмов.
Так же и «расширение» описывает только определенный класс суффиксов.

У человека стоит задача «обработать _все_ файлы», он совершенно инстинктивно использует шаблон *.*, это-ли не яркий пример того, что большинство людей воспринимают расширение как нечто обязательное?

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

Неправильный термин вреден тем, что он наделяет объект свойствами, которых у него нет. Это приводит к ошибкам и неоднозначностям. Это плохо.

В данном случае термин вполне себе правильный, к ошибкам приводит отсутствие мозга и опыта. В определении расширения нигде не сказано, что оно обязательно есть у всех имен файлов, более того в статье упоминается, что в Unix-like системах часто расширение отсутствует.

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

Вообще, Eddy_Em, как я понял, утверждал, что в линупсах не используется такая терминология. То есть у него «директория» вместо «папки», «суффикс» вместо «расширения имени файла». Тем не менее «filename extension» можно увидеть, например, в файловом диалоге KDE.

Я утверждал и что такая терминология не используется, и что суффикс файла зачастую не отражает содержимого файла. Не говоря уже о том, что вантузячее «расширение» - это строго 3 буквы. А суффикс может иметь любую (ограниченную особенностями ФС) длину. И суффиксов может быть сколько угодно.

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

Теперь о слове «папка»: если кто-то в компьютерной терминологии употребляет это слово, а не «директория» или «каталог», сразу этого человека априори можно считать вантузятником-ламером (соответственно подбирая терминологию).

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

Кстати, скрытые файлы по-сути не имеют имени, а лишь суффикс.

В мастдае-то как такие файлы обозвать? Без имени, но с «расширением»?

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