复制目录

复制目录

我希望将仅包含这些文件的目录内的所有文件(所有文件都是常规文件 - 该目录内没有目录、符号链接等)到另一个预先存在的目录。

这些文件具有非常常见的名称,例如,robots.txt并且不遵循任何特定模式。

我尝试了类似的命令:

cp -a "$HOME"/a "$HOME"/b 

我知道这-a是一个快捷组合-d(保留模式、所有权和时间戳)以及-R命令递归复制。

如果复制是递归的,为什么不复制文件以及解决方案是什么?

答案1

应用场景:

  1. 目录a存在但b不存在:

    cp -a "$HOME"/a "$HOME"/b
    

    将整个目录复制a到一个新目录b

  2. 目录ab存在:

    cp -a "$HOME"/a "$HOME"/b
    

    将复制目录a 里面目录b。所以你会得到一个"$HOME"/b/a目录。

  3. 目录ab存在:

    cp -a "$HOME"/a/* "$HOME"/b
    

    将复制内容a 里面目录b但排除隐藏文件和目录。虽然某些 shell 有一些包含它们的选项,但最好的方法是:

    cp -a ~/a/. ~/b/
    

    这就是我理解你想要的。

答案2

cp安全提示:

复制目录

目录 a 和 b 存在:

    cp -a a b/
    cp -a -t b a

会将目录复制a到目录中b

目录 a 存在,但 b 不存在:

    cp -a a b/
    cp -a -t b a

将生成一条友好的错误消息

复制文件

目录 b 存在

    cp -T a b

将生成一条友好的错误消息

目录b不存在

   cp -T a b

将文件复制到 b


请注意,并非所有版本的 cp/mv/ln 都有-t-T选项,但所有版本都允许 来/确保 是b一个目录。如果他们没有这些选项,则无法保证该b目录不是现有目录。

相关内容