Bash:一次一个地 mv 目录

Bash:一次一个地 mv 目录

我正在尝试将文件夹的所有子目录移动到同一服务器上的另一个共享。如果我执行 mv *,我将耗尽空间,因为只有在所有文件夹都传输完毕后才会删除这些文件夹。所以我想创建一个循环遍历每个文件夹的简短脚本。有没有人有我可以查看的示例?我搜索了一番,但找不到我想要的内容。

答案1

你可以使用rsync(1)

rsync --remove-source-files /path/to/source /path/to/destination

这将从原始路径中删除已成功传输的文件。

答案2

你要for

一个例子(这仅显示将要做什么):

for item in *; do
    echo mv "$item" /destination/directory
done

当你开心的时候,就去echo真正地做这件事。

答案3

使用mv命令将文件从一个卷移动到另一个卷是复制操作。但是,源卷上的空间会用完吗?您只会用完目标如果该卷小于您要移动的文件的总大小,则删除该卷。但无论哪种方式,您都只是在源卷上释放空间,而不是在其上分配更多空间。

如果您习惯mv将文件从一个目录“移动”到同一卷上的另一个目录,那只是重命名操作。您不是在复制数据,而是在调整文件指针以呈现不同的目录层次结构。您不会用尽空间,因为文件数据仍保留在原处。

无论哪种方式,我都不确定我是否看到了问题。:-)您是否真的尝试过这个并且空间不足,或者您只是想提前计划?

答案4

仅供参考,我相信该mv命令不会执行复制然后删除操作,即

mv /home/foo /home/bar

短时间内同时存在。它的操作更像是重命名。本质上是更改文件系统记账,以便/home/foo现在指向的内容指向,而/home/bar无需实际将磁盘上的数据从一个位置移动到另一个位置,或从以前的位置复制然后删除。

相关内容