Пробелы в путях linux

Как работать с пробелами в именах файлов в Linux

Резюме: Если у вас есть имя файла с пробелами в системе Linux, заключите ваше имя файла в кавычки, чтобы Bash обработал его правильно. Автодополнение с помощью табуляции упрощает ввод имен файлов в командной строке, даже если они содержат пробелы.

Как и большинство операционных систем, Linux поддерживает имена файлов с пробелами. Но использовать эти имена файлов в командной строке не всегда просто. Вот несколько способов обработки имен файлов, содержащих пробелы.

Скромное имя файла

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

То же самое относится и к файлам, которые вы создаете или устанавливаете. Всем вашим документам, изображениям и музыке нужны имена файлов. Без имен файлов ни один из ваших цифровых активов не мог бы существовать. Поскольку имена файлов очень важны, Linux изо всех сил старается наложить как можно меньше правил на их состав.

В Linux имя файла может содержать любой символ, кроме косой черты « / » и нулевого символа, 0x00 . Нулевой символ используется для обозначения конца строки, поэтому он не может присутствовать в самой строке, иначе Linux обрезает имя файла в позиции нулевого символа. Косая черта « / » используется в качестве разделителя в путях к каталогам.

Имена файлов вводятся с учетом регистра и могут иметь длину до 255 байт, включая нулевой символ. Пути к каталогам могут иметь длину до 4096 байт, включая нулевой символ. Обратите внимание, что это их длина в байтах, что может не соответствовать непосредственно символам. Например, 16-битные символы Unicode занимают два байта каждый.

Энтузиасты ретро-компьютеров и те, у кого долгая память, знают, что на заре персональных компьютеров дисковая операционная система Microsoft, DOS, была нечувствительна к регистру и имела ограничение имени файла до восьми символов плюс трехсимвольное расширение.

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

Но с именами файлов чаще всего нас сбивают с толку не символы, которые мы печатаем, а пробелы между ними.

Почему пробелы в именах файлов Linux доставляют неудобства

Оболочки, такие как Bash, будут интерпретировать строку слов, разделенных пробелами, как отдельные аргументы команды, а не как отдельный аргумент. Вот пример использования touch для создания нового файла с именем «мой новый файл.txt».

Как мы видим, ls показывает нам, что создано три файла: один с именем «мой», другой с именем «новый» и еще один с именем «file.txt».

Обратите внимание, что touch не жаловался и не выдавал ошибку. Он выполняет то, о чем, по его мнению, мы его просим. Так что он молча возвращает нас в командную строку. Если у нас нет мотивации проверять, мы не узнаем, что что-то пошло не по плану.

Читайте также:  Linux zip folder exclude

Чтобы создать нужный нам файл, нам нужно взять в кавычки или экранировать.

Как ставить кавычки и экранировать пробелы

Если мы цитируем все имя файла, touch знает, что ему нужно рассматривать текст в кавычках как один аргумент.

На этот раз мы получаем тот единственный файл, который и ожидали.

Мы можем получить тот же результат, если воспользуемся символом обратной косой черты « \ », чтобы избежать пробелов. Благодаря «экранированию» пробелов они не рассматриваются как специальные символы — то есть разделители аргументов — они считаются обычными старыми пробелами.

touch my\ second\ new\ file.txt

Это работает, но экранирование пробелов делает ввод имен файлов медленнее и подвержен ошибкам. Все может стать очень уродливым, если у вас есть имена каталогов с пробелами.

cp dir one/my\ text\ file.txt dir\ two/my\ text file.bak

Эта команда копирует один текстовый файл из каталога с именем «dir one» в каталог с именем «dir two» и сохраняет копию как файл BAK. И это достаточно простой пример.

Как решить проблему с пространством в ее источнике

Если это ваши собственные файлы, вы можете принять политическое решение никогда не использовать пробелы и создавать (или массово переименовывать) имена файлов, подобные этому.

По общему признанию, это надежное решение, но все же уродливое. Есть лучшие варианты, такие как использование тире « — » или подчеркивания « _ » для разделения слов.

Оба они помогут обойти проблему, и они читабельны. Если вы не хотите добавлять дополнительные символы в имена файлов, вы можете использовать CamelCase, чтобы сделать ваши имена файлов читабельными, например:

Расширение вкладок упрощает работу с пробелами

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

Вы можете использовать расширение табуляции, чтобы помочь вам точно «заполнить» имена файлов для нас. Допустим, мы хотим удалить BAK-файл, который мы создали во «втором каталоге», используя rm .

Мы начинаем с ввода «rm dir», потому что используем команду rm и знаем, что имя каталога начинается с «dir».

Нажатие клавиши «Tab» заставляет Bash сканировать совпадения в текущем каталоге.

Есть два каталога, которые начинаются с «dir», и в обоих случаях следующим символом является пробел. Поэтому Bash добавляет символ обратной косой черты « \ » и пробел. Затем Bash ждет, пока мы предоставим следующий символ. Ему нужен следующий символ, чтобы различать два возможных совпадения в этом каталоге.

Мы напечатаем «t» для «два», а затем снова нажмем «Tab».

Bash дополняет за нас имя каталога и ждет, пока мы введем начало имени файла.

У нас есть только один файл в этом каталоге, поэтому достаточно ввести первую букву имени файла «m», чтобы сообщить Bash, какой файл мы хотим использовать. Ввод «m» и нажатие «Tab» завершает имя файла для нас, а «Enter» выполняет всю команду.

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

Как использовать имена файлов с пробелами в сценариях Bash

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

Этот небольшой скрипт проверяет текущий каталог на наличие файлов, соответствующих шаблону файлов «*.txt», и сохраняет их в переменной с именем file_list . Цикл for используется для выполнения простого действия над каждым из них.

#!/bin/bash file_list=*.txt for file in $file_list do ls -hl $file done

Скопируйте этот текст в редактор и сохраните его в файл с именем «files.sh». Затем используйте команду chmod , чтобы сделать его исполняемым.

Читайте также:  Start python script on linux

У нас есть несколько файлов в этом каталоге. У одного простое имя файла, а в двух других вместо пробелов используются знаки подчеркивания « _ » или дефисы « — ». Это то, что мы видим, когда запускаем скрипт.

Кажется, это работает хорошо. Но давайте заменим файлы в каталоге на файлы, имена которых содержат пробелы.

Каждое слово в каждом имени файла обрабатывается так, как если бы это было имя файла само по себе, поэтому сценарий не работает. Но все, что нам нужно сделать, чтобы скрипт обрабатывал пробелы в именах файлов, — это заключить в кавычки переменную $file внутри цикла for .

#!/bin/bash file_list=*.txt for file in $file_list do ls -hl "$file" done

Обратите внимание, что знак доллара « $ » находится внутри кавычек. Мы внесли это изменение и сохранили его в файле сценария «files.sh». На этот раз имена файлов обрабатываются правильно.

Растянутый, но не шелушащийся

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

Linux Commands
Files tar · pv · cat · tac · chmod · grep · diff · sed · ar · man · pushd · popd · fsck · testdisk · seq · fd · pandoc · cd · $PATH · awk · join · jq · fold · uniq · journalctl · tail · stat · ls · fstab · echo · less · chgrp · chown · rev · look · strings · type · rename · zip · unzip · mount · umount · install · fdisk · mkfs · rm · rmdir · rsync · df · gpg · vi · nano · mkdir · du · ln · patch · convert · rclone · shred · srm · scp · gzip · chattr · cut · find · umask · wc
Processes alias · screen · top · nice · renice · progress · strace · systemd · tmux · chsh · history · at · batch · free · which · dmesg · chfn · usermod · ps · chroot · xargs · tty · pinky · lsof · vmstat · timeout · wall · yes · kill · sleep · sudo · su · time · groupadd · usermod · groups · lshw · shutdown · reboot · halt · poweroff · passwd · lscpu · crontab · date · bg · fg · pidof · nohup · pmap
Networking netstat · ping · traceroute · ip · ss · whois · fail2ban · bmon · dig · finger · nmap · ftp · curl · wget · who · whoami · w · iptables · ssh-keygen · ufw · arping · firewalld

RELATED: Best Linux Laptops for Developers and Enthusiasts

Источник

Как использовать пробелы в именах файлов в Linux

Favorite

Добавить в избранное

Читайте также:  Как отправить udp пакет linux

Главное меню » Linux » Как использовать пробелы в именах файлов в Linux

Как использовать пробелы в именах файлов в Linux

П робелы в именах файлов могут быть непростыми, особенно для новых пользователей Linux. Узнайте, как с ними бороться.

Вы заметите, что файлы в Linux обычно не содержат имен. Ваш учитель или коллега использует подчеркивание вместо пробелов в именах файлов и каталогов.

Дело не в том, что вы не можете использовать пробелы в именах файлов в терминале Linux. Просто это создает дополнительную боль, и поэтому вам следует по возможности избегать ее.

Почему? Позвольте мне показать это на примерах. Вы знаете общий синтаксис команд Linux:

command [options] argument1 argument2

Здесь аргументы разделены пробелами. Если вы попытаетесь использовать имена файлов с пробелами напрямую, это будет рассматриваться как отдельные аргументы, а не как один аргумент.

На приведенном выше снимке экрана, когда я пытаюсь использовать cat agatha booksкоманду, она не понимает, что agatha booksэто единственный аргумент. Он рассматривает agathaи booksкак разные имена файлов.

Как же тогда поступать с пробелами в имени файла? Есть два пути:

Заключите все имя файла в кавычки:

Выходите из каждого пробела, используя клавишу обратной косой черты:

Завершение табуляции также часто работает с пробелами. Ваш терминал может отображать имя файла с пробелом, экранированным обратной косой чертой, если вы нажмете клавишу табуляции для имени файла.

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

Чтобы использовать имя файла с пробелами, вы можете заключить его в кавычки, например:

cat "file name with spaces"

Вы также можете избежать каждого пробела с помощью обратной косой черты, но это больше работы и больше запутывает, чем предыдущий метод:

cat file\ name\ with\ spaces

Обычно вы ставите \перед каждым пробелом в имени файла.

Вы также можете использовать одинарные кавычки вместо двойных кавычек.

cat 'file name with spaces'

Одиночные кавычки игнорируют любые специальные символы. Двойные кавычки игнорируют все, кроме $, обратных кавычек и обратных косых черт./

Создайте файл с пробелом в имени файла

Теперь вам нужно ввести пробел в терминале, чтобы создать здесь имя файла. Снова используйте обратную косую черту или кавычки.

Как и в предыдущем разделе, вы можете создавать новые файлы с пробелами в имени файла, используя кавычки:

touch "file name with spaces"
touch file\ name\ with\ spaces

Работа с пространством в имени папки

Вы можете создать каталог с пробелом в его имени так же, как создаете файл.

Теперь, если вы хотите переключиться в этот каталог, у вас будет путь с пробелами.

Но для вас это больше не должно быть проблемой. Чтобы перейти в каталог с пробелом, снова используйте кавычки или обратную косую черту.

Обычно, когда вам приходится иметь дело с пробелами в именах, вы используете кавычки или обратную косую черту.

Предположим, вам нужно скопировать файл my fileиз этого new dir. Вот что вы можете сделать:

Теперь это начинает немного сбивать с толку, правда? Есть обратная и прямая косая черта. Это может напугать нового пользователя или даже опытного, если таких косых черт будет слишком много.

Это становится еще более беспорядочным, когда в имени файла есть обратная косая черта. Тогда вы увидите двойные фартуки.

Это причина, по которой вам следует избегать использования пробелов или других специальных символов в именах файлов. Чтобы разделить слова в имени файла, используйте подчеркивание.

touch a_very_long_file_name_with_too_many_words

Это упрощает чтение имен файлов, и вам не придется прилагать дополнительных усилий для устранения этих пробелов в именах файлов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Оцените статью
Adblock
detector