- Как управлять именами файлов, содержащими пробелы и специальные символы в Linux
- Работа с файлом, в имени которого есть дефис (-)
- Работа с файлами, имеющими HASH (#) в имени
- Работа с файлами, имеющими точку с запятой (;) в имени
- Работа с другими специальными символами в имени файла/папки
- Знак плюс (+) в имени файла
- Знак доллара ($) в имени файла
- Процент (%) в имени файла
- Звездочка (*) в имени файла
- Восклицательный знак (!) в имени файла
- Подпись (@) в имени файла
- ^в имени файла
- Амперсанд (&) в имени файла
- Скобки() в имени файла
- Фигурные скобки <> в имени файла
- Шевроны в имени файла
- Квадратные скобки [ ] в имени файла
- Подчеркивание (_) в имени файла
- Равно (=) в имени файла
- Работа с обратной косой чертой (\)
- Особый случай косой черты
- Вопросительный знак (?) в имени файла
- Точка (.) в имени файла
- Запятая (,) в имени файла
- Двоеточие (:) в имени файла
- Наличие кавычек (одинарных и двойных) в имени файла
- Тильда (~) в имени файла
- Пробел в имени файла
Как управлять именами файлов, содержащими пробелы и специальные символы в Linux
Мы очень часто сталкиваемся с именами файлов и папок. В большинстве случаев имя файла/папки связано с содержимым файла/папки и начинается с цифры и символов. Буквенно-цифровые имена файлов довольно распространены и очень широко используются, но это не тот случай, когда нам приходится иметь дело с именами файлов/папок, в которых есть специальные символы.
Примечание. У нас могут быть файлы любого типа, но для простоты реализации мы будем иметь дело с текстовым файлом (.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 .
Один из самых очевидных вопросов здесь — кто на земле создает/имеет дело с файлами/папками, имя которых содержит хэш (#) , точку с запятой (;) , дефис (-) или любой другой специальный символ.
Я согласен с вами, что такие имена файлов не являются обычным явлением, но ваша оболочка не должна ломаться/сдаваться, когда вам приходится иметь дело с любыми такими именами файлов. Кроме того, технически каждая вещь, будь то папка, драйвер или что-либо еще, в Linux рассматривается как файл.
Работа с файлом, в имени которого есть дефис (-)
Создайте файл, начинающийся с дефиса (-) , скажем, -abx.txt.
Пример вывода
touch: invalid option -- 'b' Try 'touch --help' for more information.
Причина вышеуказанной ошибки в том, что оболочка интерпретирует все, что следует после тире (-) , как вариант, и, очевидно, такого параметра нет, отсюда и ошибка.
Чтобы устранить эту ошибку, мы должны сказать оболочке Bash (да, этот и большинство других примеров в статье для BASH) не интерпретировать ничего после специального символа (здесь тире) как вариант.
Есть два способа устранить эту ошибку:
$ touch -- -abc.txt [Option #1] $ touch ./-abc.txt [Option #2]
Вы можете проверить созданный таким образом файл обоими указанными выше способами, выполнив команды ls или ls -l для получения длинного списка.
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 11:05 -abc.txt
Чтобы отредактировать вышеуказанный файл, вы можете сделать:
$ nano -- -abc.txt or $ nano ./-abc.txt
Примечание. Вы можете заменить nano любым другим редактором по вашему выбору, например, vim следующим образом:
$ vim -- -abc.txt or $ vim ./-abc.txt
Точно так же, чтобы переместить такой файл, вам нужно сделать:
$ mv -- -abc.txt -a.txt or $ mv -- -a.txt -abc.txt
и чтобы удалить этот файл, вы должны сделать:
Если у вас есть много файлов в папке, имя которой содержит тире, и вы хотите удалить их все сразу, сделайте так:
1. То же правило, что обсуждалось выше, действует для любого количества дефисов в имени файла и их появления. А именно, -a-b-c.txt, ab-c.txt, abc-.txt и т. д.
2. Для имени папки с любым количеством дефисов и их появления действует то же правило, что обсуждалось выше, за исключением того, что для удаления папки необходимо использовать ‘rm -rf ‘ как:
Работа с файлами, имеющими HASH (#) в имени
Символ # имеет совсем другое значение в BASH. Все, что следует после # , интерпретируется как комментарий и, следовательно, игнорируется BASH.
создайте файл #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 total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:14 #abc.txt
Теперь создайте файл, имя которого содержит # где угодно, кроме начала.
$ touch ./a#bc.txt $ touch ./abc#.txt or $ touch 'a#bc.txt' $ touch 'abc#.txt'
Запустите ‘ls -l’, чтобы проверить это:
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:16 a#bc.txt -rw-r--r-- 1 avi avi 0 Jun 8 12:16 abc#.txt
Что происходит, когда вы создаете два файла (например, a и #bc) одновременно:
Проверьте только что созданный файл:
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:18 a.txt
Из приведенного выше примера видно, что был создан только файл «a», а файл «#bc» был проигнорирован. Чтобы успешно выполнить описанную выше ситуацию, мы можем сделать,
$ touch a.txt ./#bc.txt or $ touch a.txt '#bc.txt'
$ ls -l total 0 -rw-r--r-- 1 avi avi 0 Jun 8 12:20 a.txt -rw-r--r-- 1 avi avi 0 Jun 8 12:20 #bc.txt
Вы можете переместить файл как:
$ mv ./#bc.txt ./#cd.txt or $ mv '#bc.txt' '#cd.txt'
$ cp ./#cd.txt ./#de.txt or $ cp '#cd.txt' '#de.txt'
Вы можете отредактировать его, используя выбранный вами редактор, например:
$ nano ./#cd.txt or $ nano '#cd.txt'
Чтобы удалить все файлы с решеткой (#) в имени файла, вы можете использовать:
Работа с файлами, имеющими точку с запятой (;) в имени
Если вы не знаете, точка с запятой действует как разделитель команд в BASH и, возможно, в других оболочках. Точка с запятой позволяет выполнить несколько команд за один раз и действует как разделитель. Вы когда-нибудь имели дело с каким-либо именем файла, содержащим точку с запятой? Если не здесь, вы будете.
Создайте файл с точкой с запятой.
Пример вывода
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, что ; является частью имени файла, а не разделителем команд.
Остальные действия (а именно, копирование, перемещение, удаление) над файлом и папкой, в имени которых есть точка с запятой, можно выполнить напрямую, заключив имя в одинарные кавычки.
Работа с другими специальными символами в имени файла/папки
Знак плюс (+) в имени файла
Не требует ничего лишнего, просто сделайте это обычным способом, используя простое имя файла, как показано ниже.
Знак доллара ($) в имени файла
Вы должны заключить имя файла в одинарные кавычки, как мы сделали в случае с точкой с запятой. Остальное прямо..
Процент (%) в имени файла
Вам не нужно ничего делать по-другому, относитесь к нему как к обычному файлу.
Звездочка (*) в имени файла
Наличие звездочки в имени файла ничего не меняет, и вы можете продолжать использовать его как обычный файл.
Примечание. Если вам нужно удалить файл, который начинается с * , никогда не используйте следующие команды для удаления таких файлов.
Восклицательный знак (!) в имени файла
Просто заключите имя файла в одинарную кавычку, и все остальное останется прежним.
Подпись (@) в имени файла
Ничего лишнего, рассматривайте имя файла, имеющее At Sign, как нестандартный файл.
^в имени файла
Не требует дополнительного внимания. Используйте файл с ^ в имени как обычный файл.
Амперсанд (&) в имени файла
Имя файла должно быть заключено в одинарные кавычки, и вы готовы к работе.
Скобки() в имени файла
Если имя файла содержит круглые скобки, вам необходимо заключить имя файла в одинарные кавычки.
Фигурные скобки <> в имени файла
Дополнительный уход не требуется. Просто относитесь к нему как к другому файлу.
Шевроны в имени файла
Имя файла с шевронами должно быть заключено в одинарные кавычки.
Квадратные скобки [ ] в имени файла
Относитесь к имени файла с квадратными скобками как к обычному файлу, и вам не нужно заботиться об этом.
Подчеркивание (_) в имени файла
Они очень распространены и не требуют ничего дополнительного. Просто сделайте то, что вы сделали бы с обычным файлом.
Равно (=) в имени файла
Наличие знака равенства ничего не меняет, вы можете использовать его как обычный файл.
Работа с обратной косой чертой (\)
Обратная косая черта указывает оболочке игнорировать следующий символ. Вы должны заключить имя файла в одинарные кавычки, как мы сделали в случае с точкой с запятой. Остальные вещи прямо вперед.
Особый случай косой черты
Вы не можете создать файл, имя которого содержит косую черту (/) , пока в вашей файловой системе нет ошибки. Невозможно избежать косой черты.
Поэтому, если вы можете создать такой файл, как ‘/12.txt’ или ‘b/c.txt’, то либо в вашей файловой системе есть ошибка, либо у вас есть поддержка Unicode, который позволяет создать файл с косой чертой. В этом случае косая черта — это не настоящая косая черта, а символ Unicode, похожий на косую черту.
Вопросительный знак (?) в имени файла
Опять пример, где особо стараться не надо. Имя файла со знаком вопроса можно трактовать самым общим образом.
Точка (.) в имени файла
Файлы, начинающиеся с точки (.) , имеют особое значение в Linux и называются точечными файлами. Это скрытые файлы, как правило, конфигурационные или системные файлы. Вы должны использовать ключ ‘-a’ или ‘-A’ с командой ls для просмотра таких файлов.
Создание, редактирование, переименование и удаление таких файлов очень просто.
Примечание. В Linux в имени файла может быть столько точек (.) , сколько вам нужно. В отличие от других системных точек в имени файла нет разделения имени и расширения. Вы можете создать файл с несколькими точками как:
$ 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 ,12.txt or $ touch ,12,.txt
Двоеточие (:) в имени файла
Вы можете иметь двоеточие в имени файла, сколько хотите, и вам не нужно ничего лишнего. Просто сделайте это обычным способом, как простое имя файла.
$ touch :12.txt or $ touch :12:.txt
Наличие кавычек (одинарных и двойных) в имени файла
Чтобы иметь кавычки в имени файла, мы должны использовать правило обмена. То есть, если вам нужно иметь одинарную кавычку в имени файла, заключите имя файла в двойные кавычки, а если вам нужно иметь двойную кавычку в имени файла, заключите его в одинарную кавычку.
$ touch "15'.txt" and $ touch '15”.txt'
Тильда (~) в имени файла
Некоторые редакторы в Linux, такие как emacs, создают резервную копию редактируемого файла. Файл резервной копии имеет имя исходного файла плюс тильду в конце имени файла. Вы можете иметь файл, имя которого включает тильду, в любом месте просто так:
$ touch ~1a.txt or $touch 2b~.txt
Пробел в имени файла
Создайте файл, в имени которого есть пробел между символом/словом, скажем \привет, меня зовут avishek.txt.
Не рекомендуется иметь имя файла с пробелами, и если вам нужно выделить читаемое имя, вы должны использовать знаки подчеркивания или тире. Однако, если вам нужно создать такой файл, вы должны использовать обратную косую черту, которая игнорирует следующий за ним символ. Чтобы создать вышеуказанный файл, мы должны сделать это следующим образом.
$ touch hi\ my\ name\ is\ avishek.txt hi my name is avishek.txt
Я попытался охватить все сценарии, с которыми вы можете столкнуться. Большая часть приведенной выше реализации явно предназначена для оболочки BASH и может не работать в другой оболочке.
Если вы чувствуете, что я что-то упустил (это очень распространено и характерно для человека), вы можете включить свое предложение в комментарии ниже. Оставайтесь на связи, продолжайте комментировать. Оставайтесь с нами и на связи! Ставьте лайки, делитесь нами и помогайте нам распространяться!