![如何在复制目录后将其从源中删除?](https://linux22.com/image/1320466/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%A4%8D%E5%88%B6%E7%9B%AE%E5%BD%95%E5%90%8E%E5%B0%86%E5%85%B6%E4%BB%8E%E6%BA%90%E4%B8%AD%E5%88%A0%E9%99%A4%EF%BC%9F.png)
我只想移动目录。我依次查看了 mv、cp 和 rsync,因为每个工具似乎都没有在复制目录后从源中删除目录的选项。例如,当 src 和 dst 位于不同的设备上时,mv 需要文件,而不是目录:
“设备间移动失败:src 到 dst;无法删除目标:是一个目录”
也许最简单的方法是使用额外的删除命令,但我不想使用它,因为这会增加数据丢失的风险。
答案1
正如 Bob 所说。不幸的是,我(目前)无法发表评论,因此我必须在此处做出调整。我建议使用 Bob 命令的稍微修改版本:
cp -rp source-dir target-dir && rm -r source-dir;
双 & 符号确保只有第一个命令完成后才会执行第二个命令成功地——如果由于某种原因(例如目标卷上没有足够的空间)复制失败,并且源仍然会被删除,那将是一件可怕的事情......
答案2
实际上,动量可以“移动”目录;但不能跨设备或文件系统移动。它运行速度非常快,因为它所做的只是重新定义文件指针;内容本身不会被复制。
因此,您需要两个命令(复制然后删除)。在我的 Solaris 系统上,我使用这两个命令移动目录:
cp -rp source-dir target-dir; rm -r source-dir;
请参阅手册页,确保您使用适合您的环境以及可能存在的任何符号链接的正确语法。