Поиск по сайту:

Как создавать файлы со специальными символами в Linux


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

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

Примечание: У нас могут быть файлы любого типа, но для простоты и легкости реализации мы будем иметь дело с текстовыми файлами (.txt) на протяжении всей статьи.

Наиболее распространенные имена файлов в Linux

Примеры наиболее распространенных имен файлов:

abc.txt
avi.txt
debian.txt
...

Примеры числовых имен файлов:

121.txt
3221.txt
674659.txt
...

Примеры буквенно-цифровых имен файлов:

eg84235.txt
3kf43nl2.txt
2323ddw.txt
...

Примеры имен файлов, которые имеют специальный символ и встречаются не очень часто:

#232.txt
#bkf.txt
#bjsd3469.txt
#121nkfd.txt
-2232.txt
-fbjdew.txt
-gi32kj.txt
--321.txt
--bk34.txt
...

Один из самых очевидных вопросов здесь – кто вообще создает/работает с файлами/именами папок, имеющими Hash (#) и точку с запятой (;), тире (-) или любой другой специальный символ.

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

Пунктирное имя файла в Linux

В Linux имена файлов, которые начинаются с тире («-»), часто называются «дефисными именами файлов» или «именами файлов через дефис». Эти имена файлов иногда могут вызывать проблемы при работе с ними, потому что начальное тире может быть неправильно истолковано как опция или помечено утилитами командной строки.

Создание пунктирного файла в Linux

Чтобы работать с пунктирными именами файлов в Linux, сначала создайте файл, который начинается с тире (-), скажем -abx.txt с помощью сенсорной команды.

$ touch -abc.txt

Пример выходных данных:

touch: invalid option -- 'b'
Try 'touch --help' for more information.

Причина вышеуказанной ошибки в том, что оболочка интерпретирует все, что угодно после тире (-), как вариант, и очевидно, что такого варианта нет, отсюда и ошибка.

Чтобы устранить такую ошибку, мы должны сказать оболочке bash, чтобы она не интерпретировала ничего после специального символа (в данном случае тире), как вариант.

Существует два способа устранения этой ошибки:

$ touch -- -abc.txt		[Option #1]
touch ./-abc.txt		[Option #2]

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

$ ls -l

total 0
.rw-rw-r-- tecmint tecmint   0 B  Tue Jun 20 10:32:43 2023 -abc.txt

Редактирование пунктирного файла в Linux

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

$ nano -- -abc.txt 
or 
nano ./-abc.txt 

Вы можете заменить nano на любой другой редактор по вашему выбору, например, использовать редактор vim, как показано на рисунке:

$ vim -- -abc.txt 
or 
vim ./-abc.txt 

Переименовать пунктирный файл в Linux

Чтобы переименовать файл с дефисным именем, вы можете использовать команду mv, как показано на рисунке.

Например, чтобы переименовать файл с именем "-abc.txt" в "-a.txt", вы должны использовать:

$ mv -- -abc.txt -a.txt
OR
mv ./-abc.txt ./-a.txt

Удалить пунктирный файл в Linux

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

$ rm -- -abc.txt
OR
rm ./-abc.txt 

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

$ rm ./-*

То же правило, которое обсуждалось выше, следует для любого количества дефисов в имени файла и их вхождения. А именно, -a-b-c.txt, ab-c.txt, abc-.txt и т.д.

То же правило, которое обсуждалось выше, следует для имени папки с любым количеством дефисов и их вхождения, за исключением того, что для удаления папки необходимо использовать 'rm -rf' как:

$ rm -rf -- -abc
or
rm -rf ./-abc

Хешированное имя файла в Linux

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

Тем не менее, стоит упомянуть, что некоторые специальные символы, включая "#", имеют особое значение в определенных контекстах или при использовании с определенными командами или утилитами.

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

Создание хеш-файла в Linux

Вот пример создания файла с символом "#" в имени:

$ touch #abc.txt

Пример выходных данных:

touch: missing file operand
Try 'touch --help' for more information.

Причина вышеуказанной ошибки заключается в том, что bash интерпретирует #abc.txt как комментарий и, следовательно, игнорирует его. Таким образом, команда touch была передана без файлового операнда и, следовательно, является ошибкой.

Чтобы устранить такую ошибку, вы можете попросить bash не интерпретировать # как комментарий.

$ touch ./#abc.txt
or
touch '#abc.txt'

и проверьте только что созданный файл как:

$ ls -l

.rw-rw-r-- tecmint tecmint 0 B Tue Jun 20 11:11:00 2023 #abc.txt

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

$ touch ./a#bc.txt
touch ./abc#.txt

or
touch 'a#bc.txt'
touch 'abc#.txt'

Что происходит, когда вы создаете сразу два файла (скажем, a и #bc):

$ touch a.txt #bc.txt

Очевидно, что из приведенного выше примера был создан только файл 'a', а файл '#bc' был проигнорирован. Для успешного выполнения вышеописанной ситуации мы можем:

$ touch a.txt ./#bc.txt
or
touch a.txt '#bc.txt'

Наконец, проверьте только что созданный файл с помощью команды ls.

$ ls -l

Переименование или копирование хеш-файла в Linux

Чтобы переименовать хэш-файл, можно использовать команду mv, как показано на рисунке.

$ mv ./#bc.txt ./#cd.txt
or
mv '#bc.txt' '#cd.txt'

Чтобы скопировать хеш-файл, вы можете использовать команду cp, как показано на рисунке.

$ cp ./#cd.txt ./#de.txt
or
cp '#cd.txt' '#de.txt'

Редактирование или удаление хеш-файла в Linux

Чтобы отредактировать хеш-файл, вы можете использовать редактор nano или vim, как показано на рисунке.

$ vi ./#cd.txt
or
vi '#cd.txt'
$ nano ./#cd.txt
or
nano '#cd.txt'

Чтобы удалить хэш-файл, вы можете использовать команду rm, как показано на рисунке.

$ rm ./#bc.txt 
or
rm '#bc.txt'

Чтобы удалить все файлы, в имени которых есть хеш (#), вы можете использовать:

$ rm ./#*

Имя файла с запятой в Linux

Если вы не в курсе, точка с запятой действует как разделитель команд в BASH и, возможно, в другой оболочке. Точка с запятой позволяет выполнять несколько команд за один раз и выступает в качестве разделителя. Вы когда-нибудь сталкивались с именем файла, в котором есть точка с запятой? Если нет, то вы это сделаете.

Создайте файл с точкой с запятой.

$ touch ;abc.txt

Пример выходных данных:

touch: missing file operand
Try 'touch --help' for more information.
bash: abc.txt: command not found

Причина вышеуказанной ошибки заключается в том, что при выполнении вышеуказанной команды BASH интерпретирует touch как команду, но не может найти ни одного файлового операнда перед точкой с запятой, что приводит к ошибке.

Он также сообщает о другой ошибке, о которой команда 'abc.txt' не была найдена, только потому, что после точки с запятой BASH ожидал другую команду, а 'abc.txt' не является командой.

Чтобы устранить такую ошибку, скажите BASH, чтобы он не интерпретировал точку с запятой как разделитель команд, как:

$ touch ./';abc.txt'
or
touch ';abc.txt'

Примечание: Мы заключили имя файла в одинарную кавычку ''. Он сообщает BASH, что ; является частью имени файла, а не разделителем команд.

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

Специальные символы в именах файлов в Linux

В Linux имена файлов могут содержать большинство специальных символов, включая пробелы, точки, тире, подчеркивания и даже такие символы, как @, !, $ и %.

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

Знак плюса (+) в имени файла

Чтобы создать файл со знаком плюс (+) в Linux, вы можете использовать команду touch вместе с именем файла, заключенным в одинарные кавычки.


touch '+ravi.txt' 

Знак доллара ($) в имени файла

Чтобы создать файл со знаком доллара ($) в Linux, вы можете использовать команду touch вместе с именем файла, заключенным в одинарные кавычки.


touch '$ravi.txt' 

Процент (%) в имени файла

Чтобы создать файл со знаком процента (%) в Linux, вы можете использовать.


touch '%ravi.txt' 

Звездочка (*) в имени файла

Чтобы создать файл со знаком звездочки (*) в Linux, вы можете использовать.

$ touch '*ravi.txt' 

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

$ rm *
or
rm -rf *

Вместо этого используйте,

$ rm ./*.txt

Восклицательный знак (!) в имени файла

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

$ touch '!ravi.txt'

При знаке (@) в имени файла

Ничего лишнего, относитесь к имени файла со знаком @ как к обычному файлу.

$ touch '@ravi.txt'

Знак каретки (^) в имени файла

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

$ touch '^ravi.txt'

Знак амперсанда (&) в имени файла

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

$ touch '&ravi.txt'

Круглые скобки() в имени файла

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

$ touch '(ravi.txt)'

Знак фигурных скобок ({}) в имени файла

Никакого дополнительного ухода не требуется. Просто относитесь к нему как к еще одному файлу.

$ touch {ravi.txt}

Шевроны (<>) в имени файла

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

$ touch '<ravi.txt>'

Квадратные скобки ([]) в имени файла

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

$ touch [ravi.txt]

Ниже оценки (_) в имени файла

Они очень распространены и не требуют ничего дополнительного. Просто сделайте то, что вы сделали бы с обычным файлом.

$ touch _ravi.txt

Равно (=) в имени файла

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

$ touch =ravi.txt

Обратная косая черта (\) в имени файла

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

$ touch '\ravi.txt'

Вперед (\) в имени файла

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

Таким образом, если вы можете создать файл типа '/ravi.txt' или 'b/c.txt', то либо в вашей файловой системе есть ошибка, либо у вас есть поддержка Unicode, которая позволяет вам создать файл с косой чертой. В этом случае косая черта — это не настоящая косая черта, а символ Юникода, который выглядит как косая черта.

Вопросительный знак (?) в имени файла

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

$ touch '?ravi.txt'

Точка (.) в имени файла

Файлы, начинающиеся с точки (.) очень специфичны в Linux и называются dotfiles. Это скрытые файлы, как правило, конфигурационные или системные файлы. Для просмотра таких файлов необходимо использовать переключатель '-a' или '-A' с командой ls.

Создание, редактирование, переименование и удаление таких файлов не вызывает никаких затруднений.

$ touch '.ravi.txt'

style="color: red;">Примечание: В Linux у вас может быть столько же точек (.) как вам нужно в имени файла. В отличие от других системных точек в файле, имена не означают разделения имен и расширений. Вы можете создать файл с несколькими точками следующим образом:

$ touch 1.2.3.4.5.6.7.8.9.10.txt

и проверьте его как:

$ ls -l

total 0
-rw-r--r-- 1 avi avi 0 Jun  8 14:32 1.2.3.4.5.6.7.8.9.10.txt

Запятая (,) в имени файла

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

$ touch ',ravi.txt'
or
touch ',ravi,.txt'

двоеточие (:) в имени файла

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

$ touch :12.txt
or
touch ':ravi:.txt'

двойные кавычки ("") в имени файла

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

$ touch "15'.txt"

and

touch 'ravi”.txt'

Тильда (~) в имени файла

Некоторые редакторы в Linux, такие как emacs, создают файл резервной копии редактируемого файла. Файл резервной копии содержит имя исходного файла и тильду в конце имени файла. Вы можете иметь файл, имя которого включает тильду, в любом месте просто как:

$ touch '~ravi.txt'
or
$touch 'anusha~.txt'

Пробел в имени файла

Создайте файл с именем, в котором есть пробел между символами/словами, скажите "привет, меня зовут ravi.txt".

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

$ touch hi\ my\ name\ is\ ravi.txt

hi my name is ravi.txt

Я постарался охватить все сценарии, с которыми вы можете столкнуться. Большинство из приведенных выше реализаций явно предназначены для BASH Shell и могут не работать в других оболочках.

Если вы чувствуете, что я что-то пропустил (это очень распространенная и человеческая природа), вы можете включить свое предложение в комментарии ниже. Оставайтесь на связи и продолжайте комментировать. Оставайтесь с нами и оставайтесь на связи! Ставьте лайки и делитесь нами и помогите нам распространиться!

Статьи по данной тематике: