Пробелы и специальные символы в имени файла

Пробелы и специальные символы в имени файла - 1.1

При работе в командной строке Linux вы можете заметить, что имена файлов со специальными символами могут вызвать некоторые проблемы. Узнайте, как обращаться с файлами, в именах которых есть пробелы или специальные символы, такие как $,?, \, * И т. Д.

Почему некоторые имена файлов вызывают проблемы >

Если хотите, в вашей системе Linux могут быть странные имена файлов. Например, ничто не мешает иметь пробелы в имени файла. Вы также можете использовать некоторые странные символы в имени файла, например &, *, \, $ и? . Проблемы начинаются, когда вы пытаетесь использовать эти имена файлов в командной строке.

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

Более проблемная вещь - это специальные символы в именах файлов. Есть некоторые символы, которые имеют особое значение для оболочки bash. Например, * и? являются подстановочными знаками, а $ означает переменную. Если вы можете избежать использования этих символов в обычных именах файлов, избегайте этого. Если вы не знаете, что такое подстановочные знаки или почему $ означает переменную, у вас есть еще больше причин избегать этих символов в обычных именах файлов!

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

 

Метод 1: цитирование >

Это очень просто: заключите имя файла в одинарные кавычки ('), чтобы пробелы или специальные символы больше вас не беспокоили:
cat 'File With Spaces.txt'

Видите, почему цитаты так важны? Если вы их не используете, cat пытается просмотреть три разных файла: FileWith и Spaces.txt.

Или другой пример:
rm 'File*.txt'

Здесь цитаты даже важнее! Поскольку * - это подстановочный знак оболочки, который соответствует любому символу, у вас будут большие проблемы, если вы не будете использовать кавычки. Без кавычек оболочка удаляет File*.txt как и предполагалось, но в дополнение File.txtFile2.txtFile22.txt и другие будут удалены.

 

Метод 2: экранирование >

Другой способ справиться со специальными символами в имени файла - это бежать персонажи. Вы ставите обратную косую черту (\) перед специальным символом или пробелом. Это заставляет оболочку bash обрабатывать специальный символ как обычный символ:
cat File\ With\ Spaces.txt

или:
rm File\*.txt

Но что делать, если имя файла содержит символ \? Ну, вы тоже избежите этого!
rm File\\.txt

Конечно, вы также можете использовать цитаты:
rm 'File\.txt'

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