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



我正在尝试将一个大目录复制到 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

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

我哪里弄错了?

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

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

这应该有效

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

感谢您的支持,我做了波纹管方法进行排序,我确实尝试了 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

如果您有更好的解决方案,欢迎您...

最新更新