我正在使用以下命令加入大约 20 个文件,总大小为 40Gb。
cat hda1.ntfs-ptcl-img.gz.* > hda1.ntfs-ptcl-img.gz
只是想知道这个过程通常需要多长时间,因为它已经运行了一段时间。
谢谢。
按 Ctrl+Z 暂停作业,然后使用“bg”命令在后台运行它。然后你可以使用'ls -l'来查看输出文件的大小,或者'ls -l /proc/*/fd | grep hda1' 显示正在处理的文件。
只是想知道这个过程通常需要多长时间
根据此处提供的信息,这是不可能回答的:这取决于您从哪里读取、写入到哪里等。如果您同时从本地磁盘读取和写入本地磁盘,就会出现一些争用。如果您正在通过网络读取或写入,则速度可能会更慢,具体取决于您的网络速度。
要从该过程中获取更多信息,您可以将其从单个 cat 命令分解为 for 循环:
for file in hda1.ntfs-ptcl-img.gz.*
do
echo "Starting $file at `date`"
cat $file >> hda1.ntfs.ptcl-img.gz
done
或者,您可以使用pv
(pipeview) 实用程序从管道中获取更多信息。来自man pv
:
pv 允许用户通过提供诸如已用时间、完成百分比(带有进度条)、当前吞吐率、传输的总数据和 ETA 等信息来查看数据通过管道的进度。
要使用它,请将其插入两个进程之间的管道中,并带有适当的选项。它的标准输入将被传递到其标准输出,并且进度将显示在标准错误上。
pv 将依次复制每个提供的文件到标准输出(- 表示标准输入),或者如果没有指定文件,则只复制标准输入。这与 cat(1) 的行为相同。
因此,只需cat
在命令行中替换为pv
:
pv hda1.ntfs-ptcl-img.gz.* > hda1.ntfs-ptcl-img.gz
不过,由于您已经开始了这项工作,因此下次要做什么的提示并不是特别有用。相反,您可以将正在运行的作业置于后台(使用 ctrl+z,然后bg
在提示符下运行以使作业继续在后台运行)。如果你幸运的话,你的 livecd 会有watch
,所以你可以watch ls -h hda1.ntfs.ptcl-img.gz
- 这将每隔几秒运行一次 ls 并使用输出更新屏幕,这样你就可以看到文件随着时间的推移而增长。
如果你还没有watch
安装,使用穷人的手表:
while true
do
clear
date
ls -l hda1.ntfs.ptcl-img.gz
sleep 3
done
您仍然需要自己弄清楚字节的写入速度(以及您还剩下多少时间)。
在另一个终端中,使用“ls -al”检查输出文件的大小,这样你就会知道你走了多远。
对于进度条,请尝试“pv”(管道查看器): http: //www.catonmat.net/blog/unix-utilities-pipe-viewer/
您可以创建更复杂的过程,该过程将向您显示已在处理的文件。它不会显示整个过程的时间,但会比你的更详细。
for f in `ls hda1.ntfs-ptc1-img.gz.*`; do
echo $f
cat $f >> hda1.ntfs-ptc1.img.gz
done
简短的回答是,大概一个小时左右。
如果您在本地执行此操作并且尚未返回提示,则它仍在工作。如果您在远程进行操作,那么您的连接可能会超时(取决于一系列因素,例如您是否连接到无线路由器)。
就像其他人所说的那样,这在很大程度上取决于加入了多少文件,无论是本地的还是远程的,您的机器上正在发生的其他进程,您的处理器,时钟速度和 RAM 的位置等等。
确保它正在做某事的最简单方法是打开另一个终端窗口并定期运行“ls -l /path/to/file.name”并查看输出文件是否变大。您还可以运行“top -p PID”(将 PID 替换为实际的进程 ID)以使用 top 仅监视该进程,只要它仍在运行,它就仍在做某事。
与 Roger 的回答类似,我将运行watch -n 10 "ls -l"
,它每 10 秒调用一次“ls -l”,让我观察文件的增长情况。或者我会使用watch "du -sh"
.
我真的不知道在文件操作期间这是否是一件“好”的事情(我想它可能会减慢一点速度?)但它对我有用。