以下命令有什么区别?
mv foo bar
mv foo/ bar/
mv foo/ bar
mv foo bar/
Run Code Online (Sandbox Code Playgroud)
或者没有区别?还是取决于正在使用的命令?例如,我读到 rsync 行为会根据您使用的版本而有所变化。有没有人有一个很好的解释,这样我就不必再猜测了,觉得我知道自己在做什么?
Mik*_*kel 19
许多 Unix 实用程序根据尾部斜杠是否存在不同地对待符号链接。
此行为在POSIX 符号链接文档中有所描述,在GNU coreutils 文档中也有提及。
基本上,尾部斜杠意味着跟随(或“取消引用”)符号链接。
例如,在下面的代码中,dirlink表示符号链接,但dirlink/表示符号链接指向的目录。 rm除非你说rm -r,否则不会删除目录,但rm没有选项会很乐意删除符号链接。
$ mkdir dir
$ ln -s dir dirlink
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:26 dirlink -> dir
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:26 dirlink -> dir
$ rm dirlink/
rm: cannot remove `dirlink/': Is a directory
$ rm dirlink
$ ls -l
total 4
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:26 dir
Run Code Online (Sandbox Code Playgroud)
它对于查看目录的权限也很有用,而不必担心目录是真实目录还是只是目录的符号链接。
$ ls -ld dirlink
lrwxrwxrwx 1 mikel mikel 3 2011-02-02 22:46 dirlink -> dir
$ ls -ld dirlink/
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dirlink/
Run Code Online (Sandbox Code Playgroud)
它仍然适用于常规目录:
$ ls -ld dir
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dir
$ ls -ld dir/
drwxr-xr-x 2 mikel mikel 4096 2011-02-02 22:46 dir/
Run Code Online (Sandbox Code Playgroud)
另一个例子是find命令。如果path您要求它搜索的是符号链接,则默认情况下它不会跟随符号链接,这意味着它只处理符号链接。添加尾部斜杠使其将符号链接视为链接指向的目录。
$ find dir
dir
dir/file
$ find dirlink
dirlink
$ find dirlink/
dirlink/
dirlink/file
Run Code Online (Sandbox Code Playgroud)
(某些版本的 find 有一个-follow或-L选项,但这使它遵循所有符号链接,而不仅仅是第一个)
在 的情况下rsync,是否应该附加斜杠取决于您是否希望要复制的目录是子目录。
$ mkdir dir
$ touch dir/file
$ rsync -r dir dir.bak
$ find .
.
./dir
./dir/file
./dir.bak
./dir.bak/dir
./dir.bak/dir/file
$ rm -r dir.bak
$ rsync -r dir/ dir.bak
$ find .
.
./dir
./dir/file
./dir.bak
./dir.bak/file
Run Code Online (Sandbox Code Playgroud)
换句话说:
rsync dir dir.bak复制dir到dir.bak, 在dir里面制作dir.bakrsync dir/ dir.bak复制 的所有内容dir,不制作dir内部dir.bak| 归档时间: |
|
| 查看次数: |
6900 次 |
| 最近记录: |