我如何复制/home/src/somedir到/dest/使得路径总是以 结束/dest/somedir,而不管是否/dest/somedir已经存在?
我想避免以/dest/somedir/somedir.
如何复制里面的一切/home/src/somedir,以/dest/这样/dest/somedir不创建,如果它已经存在被忽略?
是否有关于我可以使用的尾部斜杠的规则?我认为以斜杠结尾意味着总是只复制内容,但对我来说它仍然经常出错。
cp将始终将命令开头的文件复制到命令结尾的文件或目录中。斜线对参数没有太大作用,除非参数是指向目录的符号链接。然后使用斜杠会将其视为目录,而省略斜杠将复制链接本身。
假设您想递归复制示例中的任何子目录,您可以这样做:
cp -r /home/src/somedir /dest
Run Code Online (Sandbox Code Playgroud)
和
cp -r /home/src/somedir/* /dest
Run Code Online (Sandbox Code Playgroud)
第一个获取目录/home/src/somedir并将该参数、目录本身及其所有内容复制到最后一个参数/dest. 如果需要,它将somedir在其中创建目录,/dest如果它已经存在则使用它。
第二个添加*到第一个参数的末尾,shell 将扩展为每个不以.in开头的文件,/home/src/somedir并将复制所有这些文件和目录,/dest而不考虑已经存在的内容(除了一些标志cp将使其提示覆盖目标中与现有文件相同的文件)。
正如对此答案的评论所指出的那样,使用*抓取目录中的所有文件存在问题。一种替代方法是使用tar为您做副本
tar -c -C /home/src/somedir . | tar -x -C /dest
Run Code Online (Sandbox Code Playgroud)
这将somedir通过首先使用-C切换到该目录来创建一个没有前导路径的 tar 文件。默认情况下tar将打印到stdout它,然后我们将通过管道传输到另一个tar以首先将其提取到所需的/dest目录中。这也将保留许多文件属性,这cp也可以。
| 归档时间: |
|
| 查看次数: |
3008 次 |
| 最近记录: |