59

I installed some software and I think afterwards I was navigating through CLI and noticed that some directories or some files in some directories had single quotation marks around the names. They don't appear in the GUI. How do I get rid of them? Do I have to use a recursive command to delete the quotation marks for the entire file system?

I've actually had this problem a few times in the past but cannot recall why they happen nor what the solution was.

all 28 comments
sorted by: hot top controversial new old
[-] MorphiusFaydal@lemmy.world 63 points 1 year ago

The quotes are there because there's spaces in the file name. You don't see them in the GUI because they're not actually there. They're added by the 'ls' command to help with copy/pasting of file names. You can add 'export QUOTING_STYLE=literal' to your ~/.bashrc to permanently suppress them, or just do 'ls -N' as a one off.

[-] StrobeSpirits@discuss.tchncs.de 8 points 1 year ago* (last edited 1 year ago)

Thanks. The export command got rid of the quotation marks but I still have an issue where when I cd into one of the directories that had quotation marks (a directory with two words in the name) there is a backslash after the first word and a forward slash at the end of the file name when I use tab to complete the rest of the file name.

Add-on: you really don't need to get rid of the quotes. It's a very reasonable behavior. You just need to learn/understand what they mean.

[-] _cnt0@lemmy.villa-straylight.social 30 points 1 year ago* (last edited 1 year ago)

The backslash escapes the space because it would otherwise denote a seperator to the next argument of the command. ls a b c means invoke ls with the three arguments a,b, and c. ls 'a b c' or ls a\ b\ c means invoke ls with one argument "a b c". That behavior is universal for pretty much all unix/linux shells (ie bash).

[-] StrobeSpirits@discuss.tchncs.de 9 points 1 year ago

Thanks for explaining. How do I go about editing the bashrc file to add the export line? I am still relatively new to linux and the file has a warning about making changes unless I know what I'm doing.

[-] AlpacaChariot@lemmy.world 4 points 1 year ago

Just paste it into the end of the file, save and close it, then run "source ~/.bashrc" in the terminal to force bash to read the new settings (or close the terminal and open it again).

Heed the warning ;-)

Jk. It's not black magic. Just do as AlpacaChariot said. You might want to read up on it a bit https://www.shell-tips.com/bash/environment-variables/

[-] phx@lemmy.ca 13 points 1 year ago

That's to escape the space, so that it doesn't register as a separate keyword in whatever command you're running.

For paths/filenames with spaces, you must escape all spaces with the backslash, or use single/double quotes around it. Single quotes also prevent stuff like interpreting $ etc etc as a reference to a variable

[-] Falmarri@lemmy.world 12 points 1 year ago

The backslash is escaping the space, and the forward slash is just how tab complete works, because it's a directory, and you might be wanting to add more to go further down the directory tree

[-] elouboub@kbin.social 15 points 1 year ago

I am impressed nobody called OP a noob and told him to "RTFM". Good job y'all! Keep being a positive force.

[-] wolfshadowheart@kbin.social 11 points 1 year ago

Somewhat surprisingly the fediverse has been much kinder for Linux learners than my experience everywhere else online the last decade :)

[-] BCsven@lemmy.ca 8 points 1 year ago

That is normal with tab completion, since spaces will be seen as other commands so the slash escapes the space character

[-] squaresinger@feddit.de 19 points 1 year ago

I understand why this is weird to you, but it's supposed to work like that and you should really keep it that way.

Otherwise you have no way of knowing whether your directory contains a file called "a b c", or three files called "a" "b" and "c" (all without the quotation marks obviously).

In Linux a blank space denotes a seperator. So basically, a space means "A new thing begins now".

So e.g. if you use the cat command to print the contents of a file called "a b c", and you do it like so: "cat a b c", it will try to print the contents of the three files called "a" "b" and "c".

The other way you can go is to escape the space character. Escaping tells a program that the following character has no special meaning and is used only in it's meaning as pure text. In Linux you escape using this character: .

So "a b c" is equivalent to a\ b\ c.

All in all, this is a weird thing to get used to as a beginner, but it's an important and even helpful thing.

All in all, there are some things that are pretty weird when you first switch to Linux, but most of them have a reason. You can bend Linux to do whatever you want and you can even make it very Windows-y if you want. But in many cases there are reasons behind design decisions and bending them often results in issues down the road.

But in the end, it's your PC, and it's Linux, so do what you want.

[-] flontlocs@lemmy.world 5 points 1 year ago* (last edited 1 year ago)

Command line in general, not just Linux.

Forgetting to quoteblock spaces in Windows won't be pleasant either (especially when Windows has a Sydtem directory called "Program Files".

I'd wager a guess, that all file/folder paths that are surrounded by quotes contain at least one space!? And you're talking about the output of ls? It's rather unlikely, that installing any software has changed that behavior. It's just a display feature, to denote that "two" parts separated by a space are actually one.

[-] ReversalHatchery@beehaw.org 2 points 1 year ago

And also I think those paths are properly escaped, so you can just copy them to the terminal with the quotes for use as a path.

But I may be misremembering it so I would be happy if someone could confirm this.

[-] I_Am_Jacks_____@lemmings.world 4 points 1 year ago

You could either alias ls='ls -N' or do something like export QUOTING_STYLE=literal

this post was submitted on 27 Aug 2023
59 points (96.8% liked)

Linux

47996 readers
972 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS