如果我的 RAM 大小为 8GB,如何将 12GB 文件从 Ubuntu 19.10 复制到 Android

如果我的 RAM 大小为 8GB,如何将 12GB 文件从 Ubuntu 19.10 复制到 Android

我尝试了不同的选项将 12GB 的电影从 Ubuntu 复制到 Android(作为相机连接以获得可靠的连接,mtp 情况更糟),但令我惊讶的是,存在 RAM + SWAP 短缺的问题(总共 16GB 减去已使用部分)问题显示在图片上: RAM+SWAP 占用 99.9%。复制过程继续,Ubuntu 挂起一分钟,然后出现错误(或不出现)。

尝试复制:

  • 文件应用程序
  • DC 应用程序(显示流错误)
  • cp、rsync、dd

对我来说一切都不起作用,结果相同——内存已满,复制停止。

有什么想法如何使用 Ubuntu 简单地复制大文件?

答案1

1/ 您只需使用以下命令分割文件:

zip --split-size 1g zipfilename name_of_your_movie

这会将您的文件拆分为多个 1Gb 的压缩部分,您可以逐个移动。

2/ 然后使用以下命令重新组装各部分:

zip --split-size 0 zipfilename.zip --out unsplitted

这将创建一个名为 unsplitted 的统一 zip 文件(如果您移动的电影是“Split”,那么这将是讽刺的:P)

3/ 解压 unsplitted.zip 文件:unzip unsplitted.zip,瞧!

答案2

1)使用以下方法将文件拆分成两部分7Zip (手册页)- 分割文件而不进行压缩以获得最佳速度。将每个部分复制到 Android,然后使用存档器或者7zipper安装在 Android 上,将文件重新合并到您的超大电影中。

或者

2)使用开源应用程序缩小电影文件大小手刹或等效文件,大小不会失败。复制较小的文件。

或者

3)使用以下方法重新编码影片高效视频编码如果您的 Android 设备可以很好地播放 HEVC,则可以使用 Handbrake 或同等软件(又名 H.265)来缩小文件大小。我在我的 OnePlus 7Pro 上使用 VLC,HEVC 运行良好。您的里程可能会有所不同。

或者

4)绕过PC与Android设备之间的直接连接,通过WiFi进行传输。

答案3

您可以简单splitcat

split --size=1G movie.mp4 movie.mp4.split

复制文件,然后在 Android 上的终端仿真器中执行以下操作:

cat movie.mp4.split* >> movie.mp4

与 zip 方法一样,这需要双倍的空间。如果您的文件非常大并且目标上没有足够的空间,您可以逐步连接每个部分,然后将其删除:

for part in movie.mp4.split*; do
    cat "$part" >> movie.mp4
    rm "$part"
done

现在我们可以自动化这个过程。以下sh脚本

  • 将指定文件分割成指定大小的部分
  • 将所有文件放入目录中
  • 生成sh脚本来重新组装零件

例如,调用

sh split.sh movie.mp4 100M

创建一个movie.mp4.split包含 100MB 大小部分和一个脚本的文件夹unsplit.sh。该脚本movie.mp4在与相同的目录中重新组合movie.mp4.split,然后删除自身和文件夹。

拆分.sh:

#!/bin/sh

if [ -z "$1" ] ; then
    echo "Please specify the file to split"
    exit 1
fi
if [ ! -f "$1" ] ; then
    echo "File not found: " $1
    exit 2
fi

size=1M

if [ ! -z "$2" ] ; then
    size=$2
fi

filename=$(basename "$1")

dirname="$1".split
mkdir "$dirname"

split --bytes="$size" "$1" "$dirname/part"



unsplit_script="$dirname/unsplit.sh"

cat > "$unsplit_script" <<EOF

#!/bin/sh

working_dir=\$(dirname "\$0")

if [ -f "\$working_dir/../$filename" ] ; then
    echo "File already exists: $filename"
    exit 1
fi

for part in "\$working_dir"/part*; do
    cat "\$part" >> "\$working_dir/../$filename"
    rm "\$part"
done

rm "\$0"
rmdir "\$working_dir/../$dirname"

EOF
chmod +x "$unsplit_script"

exit 0

相关内容