题 Bash:mv目录一次一个


我试图将文件夹的所有子目录移动到同一服务器上的另一个共享。如果我做了mv *,我将耗尽空间,因为在所有文件夹都被转移之前不会删除文件夹。所以我想创建一个循环遍历每个脚本的简短脚本。有没有人有我可以看的例子?我已经四处寻找,但找不到我想要的东西。


7
2018-04-17 13:36




出于好奇:我原本以为在一个分区内移动目录是“即时的”,无论目录有多满? - Hagen von Eitzen
如果您通过网络连接执行此操作,则不会。然后再次下载和上传所有文件。 - MSalters
在两个文件夹之间移动文件时,我遇到了这个问题,这两个文件夹恰好位于两个不同的ZFS数据集中(在同一个池中),因此被视为不同的文件系统。要记住一些事情。 - Programster


答案:


你可以用 rsync(1)

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

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


20
2018-04-17 13:49



+1对于使用适当的工具进行适当的工作,并非所有任务都最好在快速制作的bash脚本中完成 - Vality


你要 for

一个例子(这将显示将要完成的事情):

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

当你开心的时候,删除 echo 真实地去做。


10
2018-04-17 13:38





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

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

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


4
2018-04-18 08:06



我认为用户正在使用网络文件系统在同一个真实分区上导出两个不同的目录树,在它们之间进行复制,他出于某种原因将它们从一个网络文件系统发送到另一个网络文件系统,尽管它们是相同的磁盘...奇怪我知道,但这会导致这个问题...... - Vality
我想知道那个,那个 将 导致临时复制,因为操作不能只用文件指针。但如果是这种情况,似乎直接在该机器上使用shell会话并使用它会好得多 mv 有效的方式。 - Craig


ls -1 | xargs -n1 -i echo mv '{}' destination

快乐时只需删除回音。


2
2018-04-17 14:44



并添加了这个:-d“\ n” - NinjaCat


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

mv /home/foo /home/bar 

短期内同时存在。它更像是重命名。必要的改变文件系统会计,以便指出什么 /home/foo 现在指向 /home/bar 实际上没有实际将磁盘上的数据从一个地方移动到另一个地方,或者复制然后从之前的位置删除。


1
2018-04-17 17:50



我认为他在不同的文件系统之间进行复制,而不仅仅是将目录移动到新路径。 - Vality