在大型目录上使用不带目标操作数的 cp 命令不会产生错误并且会占用磁盘空间

在大型目录上使用不带目标操作数的 cp 命令不会产生错误并且会占用磁盘空间

这里有点奇怪

我尝试将数据从一个目录复制到另一个目录,并从 cp 中删除目标操作数。请参阅命令

root@server:/home/pp/test1# cp -r ../dhcppc0/*

该命令运行了一个多小时,因为源目录包含超过 135GB 的数据和大量目录。

我监控了这一切,发现系统上的可用磁盘空间已经耗尽,于是就把它放了一夜。第二天早上,我注意到与服务器的会话已经超时,发现可用磁盘空间进一步减少,但文件/目录并未被复制。

仔细检查后,我看到了我的 cp 命令,发现我忘了放一个“。”作为第二个操作数来将副本指向我当前的目录,但它没有给出错误?

所以我的问题是,所有的磁盘空间都去哪儿了?我该如何找回它们?系统上是否有一些我可以清除的临时缓冲空间?

源目录保存着大约 1M 个文件中约 135GB 的数据。

任何帮助将不胜感激!

答案1

仔细检查后,我看到了我的 cp 命令,发现我忘了放一个“。”作为第二个操作数来将副本指向我当前的目录,但它没有给出错误?

为什么要这样做?在 中cp -r ../dhcppc0/*cp不处理../dhcppc0/*。shell 扩展../dhcppc0/*,然后将扩展的内容传递给cp。因此,如果它扩展为../dhcppc0/bar../dhcppc0/baz../dhcppc0/foo,则扩展的命令将是:

cp -r ../dhcppc0/bar ../dhcppc0/baz ../dhcppc0/foo

如果foo是目录,cp则会很乐意将其他目录的所有内容复制到foo

[W] 磁盘空间都去哪儿了?如何恢复?系统上是否有一些临时缓冲空间可以清除?

执行echo ../dhcppc0/*,查看出现的最后一个名字并检查该目录。

这就是为什么在复制目录或使用通配符时总是使用-t参数:

cp -t . ../dhcppc0/*
# or cp --target-directory . ../dhcppc0/*

请注意,如果你使用 ,你将错过任何点文件夹和点文件*。你不需要使用它,所以最好简单地这样做:

cp -t . ../dhcppc0/

相关内容