标签: slash

Linux 如何处理多个连续的路径分隔符(/home////username//file)?

我正在处理将文件位置传递给 scp 子进程的 python 脚本。这一切都很好,但我处于这样一种情况,我可能最终将一个路径与一个文件名连接起来,这样路径中就有一个双 ' /。我知道 bash 不关心您是否有多个文件分隔符,但我想知道如何纠正它。是 bash 去掉了额外的/s 还是真的无关紧要?

我问是因为它会为我节省几行代码来/在连接时检查额外的s。我知道这没什么大不了的,但我也很好奇。我有一个包含行cd //usr(而不是cd /usr)的 bash 脚本,这似乎暗示/在路径中使用多个s可能很重要

directory slash filenames

130
推荐指数
4
解决办法
2万
查看次数

//foo/bar 与 /foo/bar 在哪些系统上不同?

在整个 POSIX 规范中,都有规定 ( 1 , 2 , 3 ...) 允许实现/特别处理以 2 开头的路径。

POSIX 应用程序(根据 POSIX 规范编写的应用程序可移植到所有 POSIX 兼容系统)不能假设//foo/bar与 相同/foo/bar(尽管他们可以假设///foo/bar与 相同/foo/bar)。

现在那些//foo特殊对待的 POSIX 系统(历史悠久且仍在维护)是什么?我相信(我现在被证明是错误的)微软为他们的 Unix 变体 (XENIX) 和可能的 Windows POSIX 层推送了 POSIX 条款(有人能证实吗?)。

它被 Cygwin 使用,Cygwin 也是 Microsoft Windows 的类似 POSIX 的层。是否有任何非 Microsoft Windows 系统?开放虚拟机?

//foo/bar特殊的系统上,它用于什么?//host/path用于网络文件系统访问?虚拟文件系统?

某些运行在类 Unix 系统上的应用程序(如果不是系统的 API)是否会//foo/bar特别处理路径(在它们否则将其/foo/bar视为文件系统上的路径的上下文中)?


编辑,此后我在奥斯汀组邮件列表上询问了//foo/bar有关规范中处理起源的问题,并且讨论很有趣(至少从考古学的角度来看)。

slash filenames history portability

118
推荐指数
6
解决办法
1万
查看次数

什么时候应该在目录上使用尾部斜杠?

可能的重复:
linux 如何处理多个路径分隔符(/home////username//file)

我在 linux 中使用的大多数命令的行为都完全相同,无论我是否/在目录名称的末尾包含斜杠字符。

例如:

ls /home/cklein
ls /home/cklein/

cp foo bar
cp foo/ bar/
Run Code Online (Sandbox Code Playgroud)

这个尾部斜杠什么时候重要?尾部斜杠的语义是什么?

directory slash filenames

71
推荐指数
4
解决办法
5万
查看次数

Shebang以`//`开头?

我对以下脚本 ( hello.go)感到困惑。

//usr/bin/env go run $0 $@ ; exit

package main
import "fmt"
func main() {
    fmt.Printf("hello, world\n")
}
Run Code Online (Sandbox Code Playgroud)

它可以执行。(在 MacOS X 10.9.5 上)

$ chmod +x hello.go
$ ./hello.go
hello, world
Run Code Online (Sandbox Code Playgroud)

我还没有听说过以 开头的shebang //。当我在脚本顶部插入一个空行时,它仍然有效。为什么这个脚本有效?

osx shell slash shell-script shebang

62
推荐指数
2
解决办法
4023
查看次数

UNIX 路径中的双斜杠是什么意思?`cd dir/subdir//` 是否有效?

可能的重复:
linux 如何处理多个路径分隔符(/home////username//file)

不要cd dir/subdir/cd dir/subdir//意味着在UNIX一样吗?

后期会解决吗?不然有什么特别的意义吗?

cd、mv、ls 或任何命令。

command-line slash

61
推荐指数
1
解决办法
5万
查看次数

unix,以“/”和“//”开头的路径之间的区别

在 unix/linux 中,路径中任意数量的连续正斜杠通常等效于单个正斜杠。例如。

$ cd /home/shum
$ pwd
/home/shum
$ cd /home//shum
$ pwd
/home/shum
$ cd /home///shum
$ pwd
/home/shum
Run Code Online (Sandbox Code Playgroud)

然而由于某种原因,绝对路径开头的两个正斜杠被特殊对待。例如。

$ cd ////home
$ pwd
/home
$ cd ///
$ pwd
/
$ cd //
$ pwd
//
$ cd home//shum
$ pwd
//home/shum
Run Code Online (Sandbox Code Playgroud)

补丁中任何其他地方的任何其他数量的连续正斜杠都会被截断,但开头的两个将保留,即使您随后在相对于它的文件系统中导航。

为什么是这样?/... 和 //... 之间有什么区别吗?

linux bash slash filenames

57
推荐指数
3
解决办法
2万
查看次数

如何在 debugfs 中的 ext4 文件系统上删除名为“filen/ame”(带斜杠)的文件?

玩 e2fsprogs debugfs,由于更改/意外,filen/ame创建了一个名为的文件。显然,正斜杠字符/用作路径名中的特殊分隔符。

仍在使用debugfs我想删除名为 的文件filen/ame,但我没有成功,因为该/字符没有被解释为文件名的一部分?

debugfs 是否提供删除包含斜杠的文件的方法?如果是这样怎么办?

我用了:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs
Run Code Online (Sandbox Code Playgroud)

输出:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法来删除filen/ame文件:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame
Run Code Online (Sandbox Code Playgroud)

但这不起作用,只会产生:

debugfs …
Run Code Online (Sandbox Code Playgroud)

slash ext4 debugfs

26
推荐指数
1
解决办法
2244
查看次数

Kernighan 和 Pike 挑战:如何在文件名中添加斜线?

我刚刚在Unix Programming Environment,Kernighan 和 Pike 关于 Unix 的经典书籍中遇到了以下问题(我在 1984 年版第 79 页,ISBN:0-13-937699-2 中找到了以下文字):

练习 3-6。(技巧问题)如何将 / 放入文件名(即,不分隔路径组成部分的 /?

作为最终用户和程序员,我多年来一直在使用 Linux,但我无法回答这个问题。有没有办法把斜线的文件名,这是绝对内核禁止。您可以通过块设备访问修补文件系统,或使用 Unicode 中外观相似的字符,但这些都不是解决方案。

我明白,Linux ?Unix,但同样的原则应该适用,因为系统必须能够明确地从路径中提取目录层次结构。

有人知道,Kernighan 和 Pike 在问这个问题时到底在想什么吗?假设的答案是什么?“套路”究竟是什么?或者也许原始的 Unix 系统只是允许以某种方式逃避这个斜线?

更新:

我就这个问题联系了 Brian Kernighan,他是这样回答的:

答案是(或曾经)“你不能。”

因此,蒂莫西·马丁是对的,得到了​​绿色的勾号。

slash filenames historical-unix

24
推荐指数
2
解决办法
1187
查看次数

shell 命令目录名后的斜杠 (/)

我在这里有一个小问题。

如果我有两个文件,比如说fileafilebmv filea fileb

  • 删除 fileb
  • 重命名fileafileb

那么如果我有两个目录,比如说diradirbmv dira dirb

  • 移动diradirb(会成为dirb/dira

注意到在这两种情况下都没有通知或消息,这对我来说非常不一致。我认为mv dira dirb应该只是简单地覆盖dirb与内容dira(或指定目录下的合并两个目录dirb)。

我记得在某处读到过,带斜杠的目录名(如dira/)被视为目录,而没有斜杠的名称(如dira)被视为文件(当然,在某种程度上)。无论如何,现在我想让 shell(zsh 和可能的 bash)通过使用斜杠来尊重我的目录符号。是否有一个终端选项可以让我强制执行?

澄清一下,这是我想要的行为:

  • mv dira dirb结果dirb被内容覆盖dira
  • mv dira dirb/结果dira被移入dirb(在dirb/dira

有没有人和我一样的想法?还是我只是奇怪?

directory slash filenames rename

14
推荐指数
1
解决办法
5719
查看次数

我在哪里可以找到关于“*/”在 Bash 或 Zsh 中的含义的明确答案?

我试图查看 O'Reilly 关于 Unix 和 Bash 的一些参考资料,*/但找不到任何参考资料。我们可以echo */看到所有的目录。

好像只表示所有“目录”,而*表示“所有文件和目录”,但不知为何,很多用户似乎不知道,书籍也没有提到。

是否有明确的来源谈论什么*/意味着及其变化?

shell bash zsh slash wildcards

10
推荐指数
2
解决办法
1168
查看次数