cp -a 无法复制目录中的所有文件

-1 directory gnu cp recursive

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

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

我尝试了类似的命令:

cp -a "$HOME"/a "$HOME"/b 
Run Code Online (Sandbox Code Playgroud)

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

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

sch*_*ity 5

应用场景:

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

    cp -a "$HOME"/a "$HOME"/b
    
    Run Code Online (Sandbox Code Playgroud)

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

  2. 目录ab存在:

    cp -a "$HOME"/a "$HOME"/b
    
    Run Code Online (Sandbox Code Playgroud)

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

  3. 目录ab存在:

    cp -a "$HOME"/a/* "$HOME"/b
    
    Run Code Online (Sandbox Code Playgroud)

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

    cp -a ~/a/. ~/b/
    
    Run Code Online (Sandbox Code Playgroud)

    这就是我理解你想要的。

  • 请注意,最后一个命令不会复制隐藏文件。在这种特殊情况下这可能不是问题,但在一般情况下很可能是一个问题。要解决这个问题,请启用隐藏文件的通配(在“bash”中:“shopt -s dotglob”,在“zsh”中:“setopt GLOB_DOTS”)。 (4认同)
  • 将最后一个命令中的星号更改为点,它将为您复制“a”中的所有内容。有关说明,请参阅[此答案](https://unix.stackexchange.com/a/228637/100397)。 (3认同)