我有一个名为“foo bar baz blob”的目录。我该如何做?
$ cd "foo bar baz blob"
我尝试过使用引号 (" 和 ') 以及转义空格 (\ )。但是没有用。Tab 补全也不起作用。
我还必须发出包含空格的文件名参数的命令。我该怎么做?即使是 MidnightCommander (mc) 也无法做到这一点。
编辑
一年多后,我终于找到了问题的根源。我在内置 cd 中重载了一个函数,该函数可以自动列出更改目录中的文件:
$ type cd
cd ist eine Funktion.
cd ()
{
if builtin cd $1; then
ls;
fi
}
$ cd Interner\ Speicher/
bash: cd: Interner: Datei oder Verzeichnis nicht gefunden
$ builtin cd Interner\ Speicher/
$ pwd
/run/user/1000/gvfs/mtp:host=%5Busb%3A002%2C018%5D/Interner Speicher
$ ls
Alarms DCIM Movies Notifications Podcasts SmsContactsBackup
Android Download Music Pictures Ringtones
解决方案很简单:只需在 $1 周围加上双引号:
if builtin cd "$1"; then
噢。谢谢。
答案1
您有三个选择:
- 使用反斜杠字符转义空格
- 将目录名称括在双引号 (
""
)中 - 使用TAB完成
创建目录:
user@pc:~/testfolder$ ls -l
total 0
user@pc:~/testfolder$ mkdir "foo bar baz blob"
user@pc:~/testfolder$ ls
foo bar baz blob
方法 1:
user@pc:~/testfolder$ cd foo\ bar\ baz\ blob/
user@pc:~/testfolder/foo bar baz blob$ echo "This works"
This works
方法 2:
user@pc:~/testfolder$ cd "foo bar baz blob"/
user@pc:~/testfolder/foo bar baz blob$ echo "This works, too"
This works, too
方法 3:
user@pc:~/testfolder$ cd foo<TAB><ENTER>
根据您对另一个答案的评论:为了访问名为的文件,需要按如下方式进行转义:
Eric\ Burdon\ -\ Starportrait\ -\ CD\ 1\ \(flac\).cue foo\ bar\ baz\ blob/
但是,使用TAB完成可以使这个过程更容易,并且避免您必须手动转义空格。
答案2
我刚刚在 /home/abed 中创建了相同的文件夹,使用了 Tab 补全,并且成功了。参见下图。如果文件夹是在其他位置创建的,则必须先导航到该位置,然后才能通过 CD 进入文件夹。
这也行。见图
答案3
用单引号引用您的文件名。
cd 'foo bar baz literal string'
在 shell 中,单引号内没有任何内容被解释,因此您不会遇到不寻常的字符。