Linux - 如何找出文件复制过程中写入了多少字节?

Linux - 如何找出文件复制过程中写入了多少字节?

在 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/

相关内容