Как обрабатывать передачу имен файлов с пробелами в Bash

В Linux есть оболочка по умолчанию Bash (она же оболочка Bourne again) для выполнения команд для системы. Большинство программистов предпочитают bash, а не cmd из-за гибкости и мощного интерпретатора командной строки, предоставляемого bash. Тем не менее, большинство пользователей по-прежнему будут иметь проблемы при попытке передать имена файлов с пробелами в bash. Это потому, что пробелы не считаются одинаковыми в bash, как в именах файлов.

Файлы с пробелами в имени

Почему имя файла с пробелами не распознается Bash?

В Bash, если вы вводите несколько слов без управляющего символа (\) или кавычек, он будет рассматривать все слова как аргументы. Это относится ко всем операциям, независимо от того, меняете ли вы каталог с помощью ' cd ' или пытаетесь получить доступ к файлам с помощью команд ' cat '. Все, что вы пишете после их использования, будет рассматриваться как аргумент. Например:

 имя файла cat.txt 

Выполнение команды без использования escape-символа или кавычек

Примечание . Ваше имя файла может быть любым, кроме этой статьи, в качестве примера мы будем использовать « file name.txt ».

Здесь команда ' cat ' будет рассматривать файл и имя как два аргумента, а не как один аргумент. Однако, если вы используете escape-символ или кавычки, оболочка bash будет рассматривать это как один аргумент, который будет « file name.txt ».

Имя файла с пробелами в Bash

Есть несколько методов, которые можно использовать для пробелов в имени. Лучшая практика - избегать пробелов для имен файлов в будущем. Простым способом будет переименование файла, к которому вы пытаетесь получить доступ, и удаление пробелов. Некоторые другие методы используют одинарные или двойные кавычки в имени файла с пробелами или использование символа escape (\) прямо перед пробелом. Мы будем предоставлять методы с прикладными примерами, чтобы показать вам, как это работает.

Способ 1: использование одинарных и двойных кавычек

  1. Удерживайте клавиши Ctrl + Alt и нажмите T, чтобы открыть терминал .
  2. Теперь перейдите в каталог, где находится файл.

    (вы также можете перетащить файл в терминал после команды ' cat ', которая автоматически поместит цитаты в путь к файлу / каталогу)

     Рабочий стол CD 

    Смена каталога

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

  3. Введите следующую команду, чтобы прочитать текстовый файл с пробелами в имени:
     cat 'file name.txt' 

    или же

     кошка "имя файла.txt" 

    Использование кавычек, чтобы избежать пробелов в имени ошибки
  4. Одинарные и двойные кавычки приведут к тому же. В некоторых случаях вам нужно попробовать оба варианта и посмотреть, какой из них работает.

Метод 2: Использование Backlash Escape Character

  1. Удерживайте клавиши Ctrl + Alt и нажмите T, чтобы открыть терминал .
  2. Перейдите в каталог, в котором находится файл, с помощью следующей команды.
     Рабочий стол CD 

    Примечание . Поместите название своего местоположения вместо рабочего стола.

  3. Теперь введите команду и используйте escape- символ везде, где в имени есть пробел:
     cat file \ name.txt 

    Использование escape-символа, чтобы избежать ошибки пробелов

Бонус: использование котировок и Escape

Иногда, когда вы используете каталог в команде, могут возникнуть последствия использования цитат в общем пути. Это связано с тем, что некоторые команды, такие как ' mv ' или ' cp ', будут рассматривать путь как источник файла, если цитата используется целиком. Вы должны предоставить цитаты для источника и получателя по отдельности, чтобы такие команды, как « cp », могли работать правильно. Вы также можете проверить приведенный ниже пример, который покажет вам, что использование escape-символа для пути намного сложнее, и пользователи могут ошибиться с ним.

Разница между цитатами и escape-символом

Интересные статьи