Почему при вводе «ls» в каталоге Desktop появляется дополнительное место?

27

Просто из любопытства мне было интересно, есть ли причина для дополнительного места, когда я печатаю lsв каталоге Desktop. Сравнить ...

~/Desktop$ ls
 file1 file2 file3

... до ...

~/Documents$ ls
file1 file2 file3

Обратите внимание, что когда я печатаю lsна рабочем столе, я получаю дополнительный пробел в начале строки (не является частью имени файла). Я не могу найти другого примера местоположения, где я получаю это дополнительное пространство в начале строки. Кто-нибудь еще получает это? Есть ли причина?

NB: я использую Ubuntu Bionic Beaver LTS release и терминал по умолчанию, который поставляется вместе с ним.

Барт
источник
У меня этого нет Если я создаю файл с пробелом в качестве имени ( touch " "), у меня есть два пробела впереди.
pLumo
6
Запустите ls -laвместо или find -type f -printf "file: -%P-\n"и предоставьте вывод. Скорее всего, есть файл с непечатным символом. Окраска файлов также потенциально может повлиять на это, так что попробуйте \lsили по dirкоманде
Сергей Колодяжный
Я не смог увидеть файлы с непечатными символами, когда попробовал первые 2 предложения. У меня все еще есть пробел, когда я пытаюсь \ ls, но не когда я использую dir ...
Барт,
35
Представьте ваш фактический результат.
Легкость гонки с Моникой

Ответы:

85

Дополнительный пробел появляется, когда у вас есть имена файлов в каталоге, которые вам нужны '(например, имена файлов с пробелами или другие специальные символы).

~/mytmp$ ls
 a           'file(abc)'         proyecto3.csv   test         Test.sh
 b           'file(ab,c?).mp4'   rootfile        Test1.txt    Test.zip
 F26         'file(abc?).mp4'    scr             Test2.test   vowels
 Feb          guess              script          Test2.txt
'Feb 26 xx'   hw                 something       test.rar

После удаления «странных» файлов я получаю:

~/mytmp$ ls
a    guess  proyecto3.csv  script     test        Test2.txt   Test.sh
b    hw     rootfile       something  Test1.txt   test.rar    Test.zip
F26  loop   scr            speak      Test2.test  testscript  vowels
muclux
источник
Спасибо за объяснение - это звучит правильно для меня. Меня бросило то, что лишний пробел в начале строки не обязательно должен находиться перед файлом, содержащим специальные символы. Но я думаю, что это сделано для того, чтобы сделать презентацию более понятной в терминале. Еще раз спасибо
Барт
53

Я уверен , что file1 file2 file3это не то , что точно показано на экране. Вы пропустили ценную информацию (фактические имена файлов), которая может быть легко уместной.

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

Более новая версия coreutils lsцитирует такие имена файлов, как правило, в одинарных кавычках. Плюс, если есть хотя бы один файл, требующий такой кавычки, он добавляет пробел перед всеми остальными именами файлов, чтобы они выравнивались «красиво», если они оказались друг под другом, то есть знак одинарной кавычки (апостроф) игнорируется для выравнивания.

См. --quoting-styleИ -Nна странице справочникаls для более подробной информации, и в разделе «Форматирование имен файлов» на его информационной странице для более подробной информации. Вы могли бы , например , рассмотреть вопрос наложения lsна ls -N.

Эгмонт
источник