shell:不同的路径模式

shell:不同的路径模式

Linux 中以下路径模式有什么区别

  • ./例如cp ./ [destination-path]
  • ./.例如cp ./. [destination-path]
  • ./*例如cp ./* [destination-path]
  • ./**例如cp ./** [destination-path]

答案1

前两个对于递归副本更有意义,即cp -r.如果源是命名目录并且目标存在,则会出现差异。这些:

cp -r src/  dest
cp -r src/. dest

第一个将复制srcdestdest/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 globstarset -o globstar

Bash 或 ksh 的结果中都不包含名称以点开头的文件或目录**,无论它们出现在树中的哪个级别,因此使用它并不是制作完整目录结构的完整副本的好方法;cp -r . dest也会复制点文件。

Bash 可以用和shopt -s dotglob来取消隐藏点文件,我不确定 ksh 是否有类似的功能。***

相关内容