Linux 中以下路径模式有什么区别
./
例如cp ./ [destination-path]
./.
例如cp ./. [destination-path]
./*
例如cp ./* [destination-path]
./**
例如cp ./** [destination-path]
答案1
前两个对于递归副本更有意义,即cp -r
.如果源是命名目录并且目标存在,则会出现差异。这些:
cp -r src/ dest
cp -r src/. dest
第一个将复制src
到dest
,dest/src
在其中创建 和 文件(src/a
成为dest/src/a
),而后者复制 的内容src
,因此src/a
成为dest/a
。
在另外两个中,shell 扩展了 glob,因此即使没有-r
.
cp ./* dest
cp ./** dest
在第一个中,shell 扩展./*
到当前目录中的文件名列表(以点开头的文件名除外),并cp
复制它们。在第二种情况下,支持它的 shell 将扩展./**
为文件名的递归列表,并再次cp
复制所列出的文件。
如果设置的话,递归**
至少在 Bash 中有效,在 ksh 中则有效。shopt -s globstar
set -o globstar
Bash 或 ksh 的结果中都不包含名称以点开头的文件或目录**
,无论它们出现在树中的哪个级别,因此使用它并不是制作完整目录结构的完整副本的好方法;cp -r . dest
也会复制点文件。
Bash 可以用和shopt -s dotglob
来取消隐藏点文件,我不确定 ksh 是否有类似的功能。*
**