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

时间:2014-11-24 10:27:26

标签: bash shell ubuntu if-statement for-loop

我正在尝试将大型目录复制到S3,并希望将大于5 GB的文件分开。 如果到目前为止做了以下事情:

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

当我运行它时,它不会分离bigfiles并复制smallfiles /目录中的所有文件

我错在哪里?

3 个答案:

答案 0 :(得分:0)

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

bigfile=$(find . -type f -size +5G)

答案 1 :(得分:0)

这应该有效

cd /source/directory/
find . -size -5G | xargs -i{} cp -ravf {} /destination/for/smallfiles/
find . -size +5G | xargs -i{} cp -ravf {} /destination/for/bigfiles/

答案 2 :(得分:0)

感谢您的支持,我做了排序方法,我尝试了If条件,但每次都失败了。 所以我确实喜欢这个:

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

如果你有更好的解决方案,最受欢迎......