Linux:路径末尾加/和不加/的区别
相关阅读
Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm=1001.2014.3001.5482
普通文件操作
首先说明这个问题只会出现在目录和符号链接中,因为如果想要索引普通文件但却在路径末尾加/则会出现错误,如例1所示。
# 例1
zhangchen@EDA:~$ /bin/ls/
bash: /bin/ls/: Not a directory
目录操作
大多数情况下,路径末尾加不加/都会指向相同的对象,如例2所示。
# 例2
# 下面两者是等效的
zhangchen@EDA:~$ cd /home
zhangchen@EDA:~$ cd /home/
命令特例
但有些命令对路径末尾的/非常敏感,表现出不同的行为,例如用于目录同步的rsync命令,如例3所示。
# 例3
zhangchen@EDA:~$ rsync -a ./source ./destination # 复制整个目录,包括目录本身
zhangchen@EDA:~$ rsync -a ./source/ ./destination # 仅复制目录内容,不包括目录本身
当源路径目录末尾不加/时,会递归复制整个目录包括目录本身,最后的结构类似于/destination/source/...;而当源路径目录末尾加/时,会递归复制整个目录但不包括目录本身,最后的结构类似于/destination/...。
类似地,cp命令在复制目录时也可能产生区别,如例4所示。
# 例4
zhangchen@EDA:~$ cp -r /source /destination # 复制整个目录,包括目录本身
zhangchen@EDA:~$ cp -r /source/ /destination # 仅复制目录内容,不包括目录本身
当源路径目录末尾不加/时,会递归复制整个目录包括目录本身,最后的结构类似于/destination/source/...;而当源路径目录末尾加/时,会递归复制整个目录但不包括目录本身,最后的结构类似于/destination/...。
符号链接
对于指向目录的符号链接的处理,末尾的/也可能产生影响,如例5所示。
# 例5
zhangchen@EDA:~$ ln -s ~/destination/ link # 建立指向目录的软链接
zhangchen@EDA:~$ ls -al link # 显示link链接文件相关信息
lrwxrwxrwx. 1 zhangchen zhangchen 0 Sep 21 00:48 link -> /home/zhangchen/destination/
zhangchen@EDA:~$ ls -al link/ # 显示link链接指向目录中的文件(即使多个符号链接嵌套也是如此)
lrwxrwxrwx. 1 zhangchen zhangchen 0 Sep 21 00:48 link -> .
lrwxrwxrwx. 1 zhangchen zhangchen 0 Sep 21 00:48 link -> ..
lrwxrwxrwx. 1 zhangchen zhangchen 0 Sep 21 00:47 link -> test
总结
普通文件操作:路径末尾加/会导致错误,因为文件不能当作目录使用。
目录操作:路径末尾加不加/通常效果一样。
命令特例:像rsync和cp等命令对路径的/结尾有特殊的处理方式,可能影响复制行为。
符号链接:加/结尾会将符号链接当作其指向的目录处理。