Bash脚本根据文件大小的变化移动文件夹?

时间:2016-10-05 05:36:40

标签: bash shell move

我在专有的Linux发行版中有一些自动下载。 他们去临时临时磁盘。我想在他们完成主RAID阵列时移动它们。我能看到的最好的方法是检查磁盘上的文件夹,看看内容是否在最后一刻发生了变化。如果没有那么它可能已完成下载然后移动它。

假设在这个位置可能有数百个文件夹或只有一个文件夹,它们都会到达同一个地方。什么是写这篇文章的最好方法?

我可以使用

获取文件夹大小列表
Temp Loc:  /volume2/4TBScratch/Processing
Dest Loc when complete: /volume1/S/00 Landing

文件夹可以包含多个文件,范围从1.5mb到10GB

find  /volume2/4TBScratch/Processing -mindepth 1 -type d -not -mmin +10 -exec mv "{}"  "/volume1/S/00 Landing" \;
find: `/volume2/4TBScratch/Processing/test': No such file or directory
4.3#

修改 使用这个:

4.3# find  /volume2/4TBScratch/Processing -mindepth 1 -type d -not -mmin +10 -exec rsync --remove-source-files "{}" "/volume1/S/00 Landing" \;
skipping directory newtest
skipping directory erw

但它会复制相关文件夹和所有文件。但是这个错误让我担心将来可能会出现问题....是因为有多个文件而它在根文件夹中为EACH文件或文件夹运行相同的移动命令?但是,由于它在第一次迭代时将其全部移动,因此无法在下一次迭代中找到它?

EDIT2: 使用Rsync

find  /volume2/4TBScratch/Processing -mindepth 1 -type d -not -mmin +10 -exec rsync -a --remove-source-files "{}" "/volume1/S/00 Landing" \;
find /volume2/4TBScratch/Processing -depth -type d -empty -delete

已解决:EDIT3 在以下评论的帮助下解决。最终脚本如下所示:

 $('#fname').val(data['user_fname']);

rsync移动文件夹和文件但留下空根目录 下一个命令找到空文件夹并将其删除。

全部谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用GNU find选项-size来检测特定大小的文件/文件夹,并使用mv -exec选项移至目的地目录。语法是

find /volume2/4TBScratch/Processing -type d -maxdepth 1 -size -10G -exec mv "{}"  "/volume1/S/00 Landing" \;

使用rsync

find /volume2/4TBScratch/Processing -type d -maxdepth 1 -size -10G -exec rsync --remove-source-files "{}" "/volume1/S/00 Landing" \;

-符号的大小表示小于上述尺寸,在本例中为10GB。关于每个使用的标志的说明

  • -type d - >仅用于识别源路径中的文件夹。
  • -maxdepth 1 - >仅查看当前源目录而不是 递归。
  • -exec - >执行后面的命令。

或者,如果要查找在特定时间(分钟)内上次修改的文件,find可以选择-mmin可以设置为值。例如。 -mmin -5将返回五分钟前修改过的文件。

因此建议根据需要添加它,x根据需要查看目录是否列出,然后添加-exec选项以移动目录

find /volume2/4TBScratch/Processing -type d -maxdepth 1 -mmin -2 -size -10G

请参阅finding files according to size的GNU文档,了解其工作原理。

注意: - 添加双引号("")以避免Bash拆分包含空格的名称。