我正在尝试将大型目录复制到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 /目录中的所有文件
我错在哪里?
答案 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
如果你有更好的解决方案,最受欢迎......