我正在尝试将一个大目录复制到 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
如果您有更好的解决方案,欢迎您...