AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 409225
Accepted
iFreilicht
iFreilicht
Asked: 2017-12-07 06:40:26 +0800 CST2017-12-07 06:40:26 +0800 CST 2017-12-07 06:40:26 +0800 CST

cp 在 . (dot) 或 .. (dot dot) 是源目录

  • 772

这个答案表明,可以将所有文件(包括隐藏文件)从目录复制src到目录中dest,如下所示:

mkdir dest
cp -r src/. dest

答案或其评论中没有解释为什么这实际上有效,而且似乎也没有人找到这方面的文档。

我尝试了一些东西。一、正常情况:

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src dest
$ ls -A dest
dest_file  src

然后,/.最后:

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/. dest
$ ls -A dest
dest_file  .dotfile  src_dir  src_file

因此,它的行为类似于*,但也会复制隐藏文件。

$ mkdir src src/src_dir dest && touch src/src_file src/.dotfile dest/dest_file
$ cp -r src/* dest
$ ls -A dest
dest_file  src_dir  src_file

.并且是此处解释..的正确硬链接,就像目录条目本身一样。

这种行为是从哪里来的,它记录在哪里?

cp recursive
  • 2 2 个回答
  • 7685 Views

2 个回答

  • Voted
  1. Best Answer
    Stephen Kitt
    2017-12-07T06:49:41+08:002017-12-07T06:49:41+08:00

    该行为是记录在案的算法的逻辑结果cp -R。参见POSIX,步骤 2f:

    将source_file目录中的文件复制到dest_file目录,执行此处列出的四个步骤(1 到 4),文件为source_files。

    .和..是目录,分别是当前目录和父目录。就外壳而言,两者都不是特殊的,因此扩展也不关心,并且目录将被复制,包括隐藏文件。*,另一方面,将扩展为文件列表,这是隐藏文件被过滤掉的地方。

    src/.是里面的当前目录src,也就是src它本身;src/src_dir/..是src_dir的父目录,又是src. 所以从外面看src,如果src是一个目录,指定src/.或src/src_dir/..作为源文件cp是等价的,并且复制其中的内容src,包括隐藏文件。

    指定的要点src/.是,如果src不是目录(或目录的符号链接),它将失败,而src不会。它也只会复制的内容src,而不复制src自己;这也符合文档:

    如果target存在并命名现有目录,则文件层次结构中每个文件的相应目标路径的名称应为 target 的串联,如果target 没有以斜杠结尾,则为单个斜杠字符,以及文件相对路径名到包含source_file的目录。

    所以cp -R src/. dest复制srcto的内容dest/.(源文件.在src),而cp -R src dest复制srcto的内容dest/src(源文件在src)。

    另一种思考方式是比较复制src/src_dirand src/.,而不是比较src/.and src。.行为就像src_dir前一种情况一样。

    • 35
  2. telcoM
    2019-02-17T00:40:36+08:002019-02-17T00:40:36+08:00

    当你跑的时候cp -R src/foo dest,你会得到dest/foo。因此,如果目录dest/foo不存在,cp将创建它,然后将内容复制src/foo到dest/foo.

    当你运行时cp -R src/. dest,cp看到它dest/.存在,然后只需复制 to 的内容src/.即可dest/.。

    当您将其视为复制名为.from的目录src并将其内容与现有目录合并时dest/.,这将是有意义的。

    • 3

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    JSON数组使用jq来bash变量

    • 4 个回答
  • Marko Smith

    日期可以为 GMT 时区格式化当前时间吗?[复制]

    • 2 个回答
  • Marko Smith

    bash + 通过 bash 脚本从文件中读取变量和值

    • 4 个回答
  • Marko Smith

    如何复制目录并在同一命令中重命名它?

    • 4 个回答
  • Marko Smith

    ssh 连接。X11 连接因身份验证错误而被拒绝

    • 3 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Marko Smith

    systemctl 命令在 RHEL 6 中不起作用

    • 3 个回答
  • Marko Smith

    rsync 端口 22 和 873 使用

    • 2 个回答
  • Marko Smith

    以 100% 的利用率捕捉 /dev/loop -- 没有可用空间

    • 1 个回答
  • Marko Smith

    jq 打印子对象中所有的键和值

    • 2 个回答
  • Martin Hope
    EHerman JSON数组使用jq来bash变量 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux 日期可以为 GMT 时区格式化当前时间吗?[复制] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC 如何复制目录并在同一命令中重命名它? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve “root”用户的文件权限如何工作? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe 将默认编辑器更改为 vim for _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey 如何下载软件包而不是使用 apt-get 命令安装它? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao 为什么目录 /home、/usr、/var 等都具有相同的 inode 编号 (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg —list-keys 命令在将私钥导入全新安装后输出 uid [未知] 2017-11-26 18:26:02 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve