在 Linux(Ubuntu)中,我使用文件管理器将大文件(例如 500mb)复制到 USB SD 卡。
根据 gui,它显示大约 5 或 6 秒后完成(目标文件大小与源文件大小相同)。但我知道它还没有完成,因为读卡器仍在闪烁,文件管理器对话框不会关闭。很明显,副本正在缓冲。甚至终端命令 stat -c%s filename 也显示了完整的文件大小(它在撒谎)。50 秒后,对话框关闭,我知道它已经完成了。
我的问题是如何随时知道有多少“实际”字节已写入 SD 卡?是否有命令可以执行此操作?
答案1
可以尝试一下:
异步 bash 脚本执行以下操作:
上一个=$(df --output=avail /home/$USER/Downloads/ | tail -n 1)
... 就在这个过程开始之前;
coproc CPY cp 源 目标
使用 set 启动复制$CPY_PID
,按住“PID”,然后...
回显 $(( $(df --output=avail /home/$USER/Downloads/ | tail -n 1) - $prev )) && \ 睡眠 1
while ! ps --pid $CPY_PID ; do ... ; done
... 在流程中定义的循环中。
将显示迄今为止复制的字节数......
当/home/$USER/Downloads/
位于同一分区/磁盘时。
调整要复制/移动的文件的已知(总)大小,并可能以百分比形式显示进度。
最后,启动复制并完成上述所有操作,很可能在 Python 中完成。
参考:主要是man bash
,但也man ps
Python 脚本提示:
$ python ... >>> 导入 Shutil >>>shutil.disk_usage('/home') 使用情况(总计=245002539008,已使用=188822900736,免费=43662839808) >>> t,u,f=shutil.disk_usage('/home') >>> f 43662839808 >>> 从 pathlib 导入 Path >>> f = Path('/home/hannu/.bashrc') >>> f PosixPath('/home/hannu/.bashrc') >>> f.stat().st_size 3771 >>> 退出() $ ls -l .bashrc -rw-r--r-- 1 hannu hannu 3771 2021 年 3 月 11 日 .bashrc $
复制文件?
https://stackoverflow.com/a/123212和
https://docs.python.org/3/library/shutil.html
...但是:这需要与上述操作同时运行,因此可能是:
https://stackoverflow.com/q/89228提供了更好的可能性。
最后,也许是最简单的:
$ dd if=/from/file bs=100K of=/to/file progress=status
...但是:这是否存在与 GUI 中看到的相同的问题?
參考文獻: https://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/