我在专有的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移动文件夹和文件但留下空根目录 下一个命令找到空文件夹并将其删除。
全部谢谢!
答案 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拆分包含空格的名称。