![复制目录](https://linux22.com/image/159288/%E5%A4%8D%E5%88%B6%E7%9B%AE%E5%BD%95.png)
我希望将仅包含这些文件的目录内的所有文件(所有文件都是常规文件 - 该目录内没有目录、符号链接等)到另一个预先存在的目录。
这些文件具有非常常见的名称,例如,robots.txt
并且不遵循任何特定模式。
我尝试了类似的命令:
cp -a "$HOME"/a "$HOME"/b
我知道这-a
是一个快捷组合-d
(保留模式、所有权和时间戳)以及-R
命令递归复制。
如果复制是递归的,为什么不复制文件以及解决方案是什么?
答案1
应用场景:
目录
a
存在但b
不存在:cp -a "$HOME"/a "$HOME"/b
将整个目录复制
a
到一个新目录b
目录
a
和b
存在:cp -a "$HOME"/a "$HOME"/b
将复制目录
a
里面目录b
。所以你会得到一个"$HOME"/b/a
目录。目录
a
和b
存在: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
目录不是现有目录。