Что означает точка если она является первым символом имени файла

Обновлено: 07.07.2024

Файловые системы ext2 и ext3 допускают наличие в именах файлов практически любых символов, кроме разделителя директорий ( / ). Однако я не советую использовать имена, содержащие русские буквы, знаки пунктуации (кроме точки), пробелы, псевдографику, экзотические знаки вроде символа перехода на новую строку. Не стоит также начинать имена файлов с дефиса ( - ). Тут дело в том, что многие программы, работающие с файлами, принимают в командной строке ключи (опции), начинающиеся с дефиса. Например, вы хотите пролистать каталог по имени -lR командой ls -lR . Но -lR будет воспринято программой ls не как имя каталога, а как ключи -l (выдать подробный листинг) и -R (рекурсивно), и в результате вы получите листинг текущего каталога (так как каталог не указан, программа ls по умолчанию работает с текущим). Во всех остальных случаях дефис в именах файлов вполне допустим и часто используется. Советуем ограничиться следующим набором символов — латинские буквы (большие и маленькие), цифры, знак подчёркивания, дефис (но не в начале), точка.

Заглавные и маленькие буквы

В файловых системах ext2 и ext3 (в отличие от файловых систем Microsoft Windows ) имена файлов являются чувствительными к регистру ( case sensitive ) — заглавные и маленькие буквы в именах различаются.

Расширения (суффиксы) имён

Термин «расширение» сохранился со времён, когда операционная система Microsoft DOS была самой популярной для персональных компьютеров типа IBM PC. Файловая система DOS позволяла в именах файлов не более 11 знаков; первые не более 8 из них считались основным именем (base name), а не более 3 последних — расширением ( extension ) имени. Для отделения основной части имени от расширения использовалась точка (кроме специальных имён — . и .. ). Сама точка не считалась частью имени. Имена WORK и WORK. означали одно и то же. Вот пример имени файла наиболее длинного имени: AUTOEXEC.BAT . Многие программы для DOS и Windows придают расширениям чересчур большое значение — например, Microsoft Word будет упорно пытаться открыть файл с расширением .DOC как документ в его родном формате, даже если в файле содержится простой текст. В файловых системах Linux точка — такая же часть имени, что и любой другой символ. Теперь уже WORK и WORK. станут ссылаться на разные файлы. Если угодно, можно по-прежнему называть часть имени файла, следующую за точкой, расширением, хотя точек в имени может быть и несколько. Например, файловому архиву в формате tar , сжатому компрессором lzma , часто дают суффикс .tar.lzma . Большинство программ для Linux не связывают расширение имени файла с его содержимым, либо связывают, но позволяют явно указать тип содержимого файла с помощью опций. Тот же Perl будет запускать свои программы по имени, независимо от того, какое расширение использовано — .pl , .plx или .cgi , и есть ли оно вообще.

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

Оболочка bash использует несколько символов из числа 256 символов набора ASCII в специальных целях, либо для обозначения некоторых операций, либо для преобразования выражений. В число таких символов входят символы:

а также символ с кодом 0, символ возврата каретки (генерируемый клавишей < Enter > ) и пробел. В зависимости от ситуации эти специальные символы могут трактоваться либо в их специальном значении, либо в буквальном, т. е. как литералы. Но мы в основном будем предполагать, что все эти символы зарезервированы и не должны использоваться в качестве литералов. Это касается в первую очередь использования их в именах файлов и каталогов, о чем мы уже говорили в гл. 4. Однако символы _ , - и . (знак подчеркивания, дефис и точка) часто используются в именах файлов, так что именно этот пример показывает, что специальное значение эти символы имеют не всегда. В именах файлов только символы точки ( . ) и слэша ( / ) имеют специальное значение. Символ слэша служит для разделения имен отдельных каталогов, а точка имеет специальное значение только если она является первым символом в имени файла (что означает, что файл является «скрытым»).

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

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

[user]$ cp two_words two\ words

Символы ' и " (одинарные и двойные кавычки) могут быть названы "символами цитирования". Любой из этих символов всегда используется в паре с его копией для обрамления какого-то выражения, совсем как в обычной прямой речи. Если какой-то текст взят в одинарные кавычки, то все символы внутри этих кавычек воспринимаются как литералы, никаким из них не придается специального значения. Если вернуться к тому же примеру с пробелами в имени файла, то можно сказать, что для того, чтобы дать файлу имя "two words" надо взять имя в кавычки:

[user]$ cp two_words 'two words'

Различие в использовании символов ' и " состоит в том, что внутри одинарных кавычек теряют специальное значение все символы, а внутри двойных кавычек — все специальные символы кроме $ , ' и \ (знака доллара, одинарных кавычек и обратного слэша).

Как сделать проверку на наличие похожего имени файла и запрос нового имени файла?
При загрузке изображения присваивается имя foto.jpg. Вопрос, как сделать проверку на то что фото с.


Сделать проверку на наличие похожего имени файла и запрос нового имени файла
Пользователь задает имя для создания файла. Вопрос, как сделать проверку на наличие похожего имени.

Синтаксическая ошибка в имени файла, имени папки или метке тома
Здравствуйте. Выполняю лаб. работу в cmd, в которой есть задание связанные с командой &quot;Copy&quot;.

Разница в работе bat-файла при его запуске от имени простого пользователя и от имени администратора
Здравствуйте. Пытаюсь создать .bat который: создаёт папку %ProgramFiles%\MyProg и копирует туда.

Это для DOS.
Точка в имена файла допускается в Windows и длинные имена тоже там допускаются. Но в винде недопустимы символы: \ / ? : " * < > |.

supmener, кстати файлы папки с именем начинающимся с точки не допускается только при их создании через Windows Explorer. Если программно - то допускается. Сие хорошо наблюдается во время использования таких IDE как на пример Eclipse.

В Windows, начиная, если не ошибаюсь с XP (а может с 7-ёрки) расширением считается часть символов после именно последней точки в имени. Так что проблем на мой взгляд никаких.

Для начала нужно определиться про какую ОС и файловую систему мы говорим.

FAT12 и DOS/Windows 9x:

Поле DIR_Name логически разбивается на первые 8 символов, образующие имя файла, и последние 3, образующие расширение. Точка-разделитель добавляется на уровне операционной системы и не хранится в поле имени. Если имя и расширение файла не заполняют отведённое для них место, остальные байты поля DIR_Name заполняются пробелами (0x20). Имя и расширение файла могут содержать любую комбинацию букв, цифр или символов с ASCII-кодами свыше 127; специальные символы распределяются на три группы:

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

Комментариям могут предшествовать пробелы (пробел, табуляция).

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

Разделитель команд. [Точка-с-запятой] Позволяет записывать две и более команд в одной строке.

Ограничитель в операторе выбора case . [Двойная-точка-с-запятой]

команда "точка" . Эквивалент команды source (см. Пример 11-18). Это встроенная команда bash.

"точка" может являться частью имени файла . Если имя файла начинается с точки, то это "скрытый" файл, т.е. команда ls при обычных условиях его не отображает.

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

Символ точка довольно часто используется для обозначения каталога назначения в операциях копирования/перемещения файлов.

Символ "точка" в операциях поиска. При выполнении поиска по шаблону , в регулярных выражениях, символ "точка" обозначает одиночный символ.

Двойные кавычки . В строке "STRING" , ограниченной двойными кавычками не выполняется интерпретация большинства служебных символов, которые могут находиться в строке. см. Глава 5.

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

Более детальному рассмотрению темы экранирования посвящена Глава 5.

Разделитель, используемый в указании пути к каталогам и файлам. [слэш] Отделяет элементы пути к каталогам и файлам (например /home/bozo/projects/Makefile).

Подстановка команд. [обратные кавычки] Обратные кавычки могут использоваться для записи в переменную команды `command` .

пустая команда. [двоеточие] Это эквивалент операции "NOP" ( no op, нет операции). Может рассматриваться как синоним встроенной команды true. Команда " : " так же является встроенной командой Bash, которая всегда возвращает "true" ( 0 ).

Символ-заполнитель в условном операторе if/then:

Как символ-заполнитель для оператора вложенного документа. См. Пример 17-9.

В комбинации с оператором > (оператор перенаправления вывода), усекает длину файла до нуля. Если указан несуществующий файл -- то он создается.

В комбинации с оператором >> -- оператор перенаправления с добавлением в конец файла и обновлением времени последнего доступа ( : >> new_file). Если задано имя несуществующего файла, то он создается. Эквивалентно команде touch.

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

Символ " : " может использоваться как разделитель полей в /etc/passwd и переменной $PATH.

инверсия (или логическое отрицание) используемое в условных операторах. Оператор ! инвертирует код завершения команды, к которой он применен. (см. Пример 6-2). Так же используется для логического отрицания в операциях сравнения, например, операция сравнения "равно" ( = ), при использовании оператора отрицания, преобразуется в операцию сравнения -- "не равно" ( != ). Символ ! является зарезервированным ключевым словом BASH.

В некоторых случаях символ ! используется для косвенного обращения к переменным.

Кроме того, из командной строки оператор ! запускает механизм историй Bash (см. Приложение F). Примечательно, что этот механизм недоступен из сценариев (т.е. исключительно из командной строки).

символ-шаблон. [звездочка] Символ * служит "шаблоном" для подстановки в имена файлов. Одиночный символ * означает любое имя файла в заданном каталоге.

В регулярных выражениях токен * представляет любое количество (в том числе и 0) символов.

арифметический оператор. В арифметических выражениях символ * обозначает операцию умножения.

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

Оператор проверки условия. В некоторых выражениях символ ? служит для проверки выполнения условия.

В конструкциях с двойными скобками, символ ? подобен трехместному оператору языка C. См. Пример 9-28.

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

Символ $ , предшествующий имени переменной, указывает на то, что будет получено значение переменной.

end-of-line (конец строки). В регулярных выражениях, символ "$" обозначает конец строки.

код завершения. Переменная $? хранит код завершения последней выполненной команды, функции или сценария.

id процесса. Переменная $$ хранит id процесса сценария.

группа команд.

Команды, заключенные в круглые скобки исполняются в дочернем процессе -- subshell-е.

Переменные, создаваемые в дочернем процессе не видны в "родительском" сценарии. Родительский процесс-сценарий, не может обращаться к переменным, создаваемым в дочернем процессе.

инициализация массивов.

Фигурные скобки.

Команда интерпретируется как список команд, разделенных точкой с запятой, с вариациями, представленными в фигурных скобках. [1] При интерпретации имен файлов (подстановка) используются параметры, заключенные в фигурные скобки.

Использование неэкранированных или неокавыченных пробелов внутри фигурных скобок недопустимо.

file1 : A file1 : B file1 : C file2 : A file2 : B file2 : C

Блок кода. [фигурные скобки] Известен так же как "вложенный блок" , эта конструкция, фактически, создает анонимную функцию. Однако, в отличии от обычных функций, переменные, создаваемые во вложенных блоках кода, доступны объемлющему сценарию.

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

Пример 3-1. Вложенные блоки и перенаправление ввода-вывода

Пример 3-2. Сохранение результата исполнения вложенного блока в файл

В отличие от групп команд в (круглых скобках), описаных выше, вложенные блоки кода, заключенные в исполняются в пределах того же процесса, что и сам скрипт (т.е. не вызывают запуск дочернего процесса -- subshell). [2]

pathname -- полное имя файла (т.е. путь к файлу и его имя). Чаще всего используется совместно с командой find.

Обратите внимание на то, что символ " ; " , которым завершается ключ -exec команды find, экранируется обратным слэшем. Это необходимо, чтобы предотвратить его интерпретацию.

test.

Проверка истинности выражения, заключенного в квадратные скобки [ ]. Примечательно, что [ является частью встроенной команды test (и ее синонимом), И не имеет никакого отношения к "внешней" утилите /usr/bin/test.

test.

Проверка истинности выражения, заключенного между [[ ]] (зарезервированное слово интерпретатора).

См. описание конструкции [[ . ]] ниже.

элемент массива.

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

диапазон символов.

двойные круглые скобки.

Вычисляется целочисленное выражение, заключенное между двойными круглыми скобками (( )) .

См. обсуждение, посвященное конструкции (( . )) .

Конструкция scriptname >filename перенаправляет вывод scriptname в файл filename. Если файл filename уже существовал, то его прежнее содержимое будет утеряно.

Конструкция command &>filename перенаправляет вывод команды command, как со stdout, так и с stderr, в файл filename.

Конструкция command >&2 перенаправляет вывод со stdout на stderr.

Конструкция scriptname >>filename добавляет вывод scriptname к файлу filename. Если задано имя несуществующего файла, то он создается.

(command)>

<(command)

перенаправление ввода на встроенный документ.

конвейер. Передает вывод предыдущей команды на ввод следующей или на вход командного интерпретатора shell. Этот метод часто используется для связывания последовательности команд в единую цепочку.

Конвейеры (еще их называют каналами) -- это классический способ взаимодействия процессов, с помощью которого stdout одного процесса перенаправляется на stdin другого. Обычно используется совместно с командами вывода, такими как cat или echo, от которых поток данных поступает в "фильтр" (команда, которая на входе получает данные, преобразует их и обрабатывает).

cat $filename | grep $search_word

В конвейер могут объединяться и сценарии на языке командной оболочки.

А теперь попробуем объединить в конвейер команду ls -l с этим сценарием.

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

Конвейер исполняется в дочернем процессе, а посему -- не имеет доступа к переменным сценария.

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

принудительное перенаправление, даже если установлен ключ noclobber option.

логическая операция OR (логическое ИЛИ). В опрециях проверки условий, оператор || возвращает 0 (success), если один из операндов имеет значение true (ИСТИНА).

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

В сценариях команды, и даже циклы могут запускаться в фоновом режиме.

Пример 3-3. Запуск цикла в фоновом режиме

Команда, исполняемая в пределах сценария в фоне, может подвесить сценарий, ожидая нажатия клавиши. К счастью, это легко "лечится".

Логическая операция AND (логическое И). В операциях проверки условий, оператор && возвращает 0 (success) тогда, и только тогда, когда оба операнда имеют значение true (ИСТИНА).

префикс ключа. С этого символа начинаются опциональные ключи команд.

COMMAND -[Option1][Option2][. ]

ls -al

sort -dfu $filename

set -- $variable

перенаправление из/в stdin или stdout. [дефис]

Обратите внимание, что в этом контексте "-" - не самостоятельный оператор Bash, а скорее опция, распознаваемая некоторыми утилитами UNIX (такими как tar, cat и т.п.), которые выводят результаты своей работы в stdout.

В случае, когда ожидается имя файла, тогда "-" перенаправляет вывод на stdout (вспомните пример с tar cf) или принимает ввод с stdin.

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

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

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

С помощью команды diff -- находить различия между одним файлом и частью другого:

grep Linux file1 | diff file2 -

И наконец пример использования служебного символа "-" с командой tar.

Пример 3-4. Резервное архивирование всех файлов, которые были изменены в течение последних суток

Могут возникнуть конфликтные ситуации между опреатором перенаправления "-" и именами файлов, начинающимися с символа "-" . Поэтому сценарий должен проверять имена файлов и предаварять их префиксом пути, например, ./-FILENAME, $PWD/-FILENAME или $PATHNAME/-FILENAME.

Если значение переменной начинается с символа "-" , то это тоже может быть причиной появления ошибок.

предыдущий рабочий каталог. [дефис] Команда cd - выполнит переход в предыдущий рабочий каталог, путь к которому хранится в переменной окружения $OLDPWD .

Не путайте оператор "-" (предыдущего рабочего каталога) с оператором "-" (переназначения). Еще раз напомню, что интерпретация символа "-" зависит от контекста, в котором он употребляется.

Минус. Знак минус в арифметических операциях.

В зависимости от контекста применения, символ " = " может выступать в качестве оператора сравнения.

Плюс. Оператор сложения в арифметических операциях.

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

Ключ (опция). Дополнительный флаг для ключей (опций) команд.

Отдельные внешние и встроенные команды используют символ " + " для разрешения некоторой опции, а символ " - " -- для запрещения.

модуль. Модуль (остаток от деления) -- арифметическая операция.

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

домашний каталог. [тильда] Соответствует содержимому внутренней переменной $HOME.

bozo -- домашний каталог пользователя bozo, а команда ls

bozo выведет содержимое его домашнего каталога.

/ -- это домашний каталог текущего пользователя, а команда ls

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

текущий рабочий каталог. Соответствует содержимому внутренней переменной $PWD.

предыдущий рабочий каталог. Соответствует содержимому внутренней переменной $OLDPWD.

начало-строки. В регулярных выражениях символ "^" задает начало строки текста.

изменяет поведение терминала или управляет выводом текста. Управляющий символ набирается с клавиатуры как комбинация CONTROL + <клавиша>.

Ctl-C

Завершение выполнения процесса.

Ctl-D

Выход из командного интерпретатора (log out) (аналог команды exit).

"EOF" (признак конца файла). Этот символ может выступать в качестве завершающего при вводе с stdin.

Ctl-G

Ctl-H

Backspace -- удаление предыдущего символа.

Ctl-J

Ctl-L

Перевод формата (очистка экрана (окна) терминала). Аналогична команде clear.

Ctl-M

Ctl-U

Стирание строки ввода.

Ctl-Z

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

Пустые строки никак не обрабатываются командным интерпретатором и могут свободно использоваться для визуального выделения отдельных блоков сценария.

$IFS -- переменная специального назначения. Содержит символы-разделители полей, используемые некоторыми командами. По-умолчанию -- пробельные символы.

Примечания

Интерпретатор, встретив фигурные скобки, раскрывает их и возвращает полученный список команд, которые затем и исполняет.

Исключение: блок кода, являющийся частью конвейера, может быть запущен в дочернем процессе (subshell-е).

Иногда целесообразно, чтобы имя папки содержало точку (.). Например, вы храните данные для эксперимента, проведенного при L=0,5. Таким образом, папка может быть названа:

Аналогичная проблема может возникнуть для имен файлов. Например:

Работа в Ubuntu, это плохая практика? Как насчет того, чтобы поделиться этими каталогами с пользователем Windows?

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

Обычно Ubuntu не использует точку и три символа (например,.txt) для определения типа файла. Так что это не имеет особого значения в контексте Ubuntu. Это полезно при обмене файлами с Windows. Ubuntu использует магические числа в первых нескольких байтах файла, чтобы определить тип файла. Тем не менее, Наутилус. игнорирует магические числа, если для определения типа файла доступно расширение из трех точек и символов. Этот параметр можно изменить. См. Force nautilus, чтобы игнорировать расширения

В Ubuntu запуск имен файлов или папок с точки, такой как .experiment_L0.5 , делает файл или папку скрытыми. Вы можете переключить отображение скрытых файлов, нажав Ctrl + H в Nautilus. В Windows имя файла начинается с. не спрятан Так что если вы передаете скрытый файл с именем .experiment_L0.5 в систему Windows это будет ясно видно.

В Ubuntu имя файла может заканчиваться точкой, так как оно не имеет особого значения в конце. Однако в Windows точка разделяет имя и расширение файла, а имя файла, оканчивающееся точкой, но расширение не допускается. Когда я попытался создать такой файл в Windows, я получил файл только с именем, без точки, без расширения.

Надеюсь это поможет.

  • Windows не позволяет следующие символы: <>:"/\|?* ( источник)
  • Больше символов, которые не поощряются: пробел и точка . ( источник)
    • Инструменты командной строки сложнее использовать, когда у вас есть пробелы в именах (сложнее, не невозможно)
    • Точки используются в RegEx (например, когда вы хотите использовать grep ). Первая точка делает файл скрытым в Linux. В Windows точки используются в расширении файла, которое используется для определения типа файла.

    Техническая информация: файловая система

    Ubuntu использует ext4 файловая система. Файловая система отслеживает, где файлы хранятся в базовом хранилище (диск или SSD или что-то еще), права доступа в форме владельца / группы / других могут считывать / записывать / выполнять, отметки времени, имя.

    Файловая система структурирует доступное хранилище. Первый блок называется "суперблок". Этот блок используется для монтирования файловой системы. Насколько я знаю, каждая современная файловая система делит свое пространство на блоки. Я думаю (и я не слишком уверен в этом), что большинство файловых систем также имеют фиксированный размер блока, хотя размер блока можно настроить при создании файловой системы. ext4 (а также ext2 и ext3) используют так называемые "inode" для файлов и каталогов. Эти иноды содержат указатели на другие блоки (которые также могут быть инодами или "блоками данных"). И "первый" индекс файла содержит всю информацию, о которой я упоминал выше.

    Еще одна информация - это "тип" файла. "Тип" может быть:

    • обычный файл
    • каталог
    • файл устройства (блочное или символьное устройство)
    • .

    Фактически, вы также можете открывать каталоги с помощью редактора:

    Поскольку каталог не содержит полный путь, а только названия содержимого, я не вижу причины, по которой файлы не могут содержать / , Я думаю, это может быть удобством. (Кто-нибудь знает почему / не допускается?)

    Однако для других файловых систем все иначе. FAT16 и FAT32 использовали так называемую "таблицу размещения файлов". Это означает, что есть таблица, которая содержит все файлы, хранящиеся в вашем файле, в каком "кластере" они начинаются и в каком кластере они заканчиваются как односвязный список.

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

    Читайте также: