首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在复制过程中分离大文件的if条件应该是什么?

问在复制过程中分离大文件的if条件应该是什么?
EN

Stack Overflow用户
提问于 2014-11-24 10:27:26
回答 3查看 60关注 0票数 0

我试图将一个大目录复制到S3,并希望分离大于5GB的文件。如果到目前为止有以下情况:

代码语言:javascript
复制
cd /source/directory/
 dsize=$(du -sh) 
 bigfile=$(find -size +5G -exec du -sh {} \;) 
 smallfiles=$(find -size -5G -exec du -sh {} \;) 
if [ "$smallfiles" !=  "$bigfiles" ] 
then   
for sfile in $smallfiles 
do   
cp -ravf $sfile /destination/for/smallfiles/ 
done
  else
    echo "Larger files are $bigfiles"
        for file in $bigfiles    do
        cp -ravf $file /destination/for/bigfiles/    
   done 
fi

当我运行它时,它不是分离大文件和复制小文件/目录中的所有文件。

我哪里错了?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-11-26 10:21:56

谢谢你的支持,我做了下面的排序方法,我确实尝试了如果条件,但每次失败。所以我确实喜欢这样:

代码语言:javascript
复制
sd=$(du -d1 | awk '$1<5000000''{print $2}')
for d in $sd
 do
  cp -rvaf $d /destination/for/smallfiles/
done

echo "Small directories has been copied to smallfiles/"

bd=$(du -d1 | awk '$1>5000000''{print $2}')
echo "Copying Bigfiles.............."
for d in $bd
 do
  cp -rvaf $d /destination/for/bigfiles/
done

如果你对此有更好的解决办法,欢迎你.

票数 0
EN

Stack Overflow用户

发布于 2014-11-24 10:39:19

从您的命令中删除-exec du -sh {} \;,因为它也在添加文件大小。使用-type f只选择以下文件:

代码语言:javascript
复制
bigfile=$(find . -type f -size +5G)
票数 0
EN

Stack Overflow用户

发布于 2014-11-24 12:38:05

这应该能行

代码语言:javascript
复制
cd /source/directory/
find . -size -5G | xargs -i{} cp -ravf {} /destination/for/smallfiles/
find . -size +5G | xargs -i{} cp -ravf {} /destination/for/bigfiles/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27102601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档