Как создавать файлы со специальными символами в 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 и могут не работать в других оболочках.
Если вы чувствуете, что я что-то пропустил (это очень распространенная и человеческая природа), вы можете включить свое предложение в комментарии ниже. Оставайтесь на связи и продолжайте комментировать. Оставайтесь с нами и оставайтесь на связи! Ставьте лайки и делитесь нами и помогите нам распространиться!