在bash脚本中使用mv错过了文件

时间:2014-07-08 23:34:57

标签: linux bash find mv

我在bash中有一个脚本,可以将大量文件从一个硬盘驱动器移动到另一个硬盘驱动器。 问题是,有时脚本会在目标文件夹中生成大量空文件并删除原始文件夹中的文件(我怀疑当目标磁盘已满时会发生这种情况) 这基本上是我认为它们导致问题的代码行:

find /mnt/$server/ar/Folder01 -mtime +30 -exec mv -t /home/user/Folder01/$server/ {} \+
find /mnt/$server/ar/Folder02 -mtime +30 -exec mv -t /home/user/Folder02/$server/ {} \+

我不能使用mv *,因为该文件夹包含太多文件。

一些想法或建议?

1 个答案:

答案 0 :(得分:0)

来自info coreutils mv

  

mv 可以将任何类型的文件从一个文件系统移动到另一个文件系统。   在fileutils的 4.0 版本之前, mv 只能定期移动   文件系统之间的文件。例如,现在 mv 可以移动整个   目录层次结构,包括来自一个分区的特殊设备   到另一个。它首先使用cp -a使用的一些相同代码   复制请求的目录和文件,然后(假设副本   它取消了原件。 如果副本失败,那么该部分   已删除复制到目标分区的内容。如果您是   将三个目录从一个分区复制到另一个分区和副本   第一个目录成功,但第二个目录没有第一个目录   留在目的地分区,第二个和第三个将是   留在原来的分区上。

所以它似乎只有在副本成功时才会删除 对于0大小的文件应该是相反的:您应该已经完成​​了原始文件系统中的空间。 (您创建一个带有文件名的文件,但不能给任何扇区免费写入) 在您开始复制之前sync可以帮助您没有完成空间但系统正在等待在磁盘上写入文件(不应该需要,但您可以随时执行...)