Linux

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

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

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

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

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

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

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

Здесь &#8216cat‘ команда будет считать файл и имя в качестве двух аргументов, а не одного аргумента. Однако, если вы используете управляющий символ или кавычки, то оболочка bash будет рассматривать это как один аргумент, который будет “имя файла.txt“.

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

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

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

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

    cd Desktop
    Изменение каталога

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

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

    или

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

Метод 2: Использование символа обратной кавычки

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

    Примечание: Поместите имя вашего местоположения вместо Desktop.

  3. Теперь введите команду и используйте бежать символ в любом месте, где есть пробел в имени:
    cat file\ имя.txt
    Использование управляющего символа для предотвращения ошибки пробела

Бонус: Использование цитат и эскейпа

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

Разница между кавычками и экранирующим символом

Добавить комментарий