27

Just out of curiosity, I was wondering if there is a reason for the extra space when I type ls in the Desktop directory. Compare...

~/Desktop$ ls
 file1 file2 file3

...to...

~/Documents$ ls
file1 file2 file3

Notice that when I type ls on the Desktop I get an extra space at the beginning of the line (not part of the filename). I can't find any other example location where I get this extra space at the beginning of the line. Does anyone else get this? Is there a reason?

NB: I am using Ubuntu Bionic Beaver LTS release and the default terminal that ships with it.

  • I don't have this. If i create a file with just a space as the name (touch " ") I have two spaces in front. – pLumo Mar 7 '19 at 8:33
  • 6
    Run ls -la instead or find -type f -printf "file: -%P-\n" and provide the output. Likely there's a file with non-printable character. Coloring of files also potentially could affect it, so try \ls or dir command – Sergiy Kolodyazhnyy Mar 7 '19 at 8:39
  • I could not see any files with non-printable characters, when I tried your first 2 suggestions. I still have a space when I try \ls but not when I use dir... – Bart Mar 7 '19 at 10:14
  • 35
    Present your actual output. – Lightness Races in Orbit Mar 7 '19 at 18:05
85

The extra space appears when you have file names in your directory needing ' around them (e.g. file names with spaces or other special characters).

~/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

After removing the 'strange' files I get:

~/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
  • Thank you for the explanation - this sounds correct to me. What threw me is that the extra space at the beginning of the line does not necessarily have to be in front of the file that has the special characters. But I guess that this is done to make the presentation clearer in the terminal. Thanks again – Bart Mar 11 '19 at 16:26
53

I'm pretty sure file1 file2 file3 is not what's exactly shown on your screen. You omitted precious information (the actual filenames) that might easily be relevant.

My assumption is that you have a filename that contains a space or other special character.

Newer version of coreutils's ls quote such filenames, typically in single quotes. Plus, if there's at least one file requiring such quoting, it adds a space in front of all other filenames so that they align up "nicely" if they happen to be underneath each other, that is, the single quote mark (apostrophe) is ignored for alignment.

See --quoting-style and -N in the manual page of ls for some more details, and the section "Formatting the file names" in its info page for even more details. You might e.g. consider aliasing ls to ls -N.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.