Unix cat命令需要多长时间?

时间:2009-12-30 08:25:40

标签: unix cat

我使用以下命令加入大约20个文件,总大小为40Gb。

cat hda1.ntfs-ptcl-img.gz.* > hda1.ntfs-ptcl-img.gz

只是想知道这个过程通常应该花多长时间,因为它已经运行了一段时间。

感谢。

6 个答案:

答案 0 :(得分:10)

按Ctrl + Z暂停作业,然后使用'bg'命令在后台运行它。然后你可以使用'ls -l'来查看输出文件的大小,或者'ls -l / proc / * / fd | grep hda1'显示正在处理的文件。

答案 1 :(得分:4)

  

只是想知道这个过程有多长   通常应该

这是不可能回答这里提供的信息:这取决于你在哪里读,你写的地方,等等。如果你同时阅读和写入本地磁盘,将会有一些争论。如果您正在通过网络进行读写,则可能会更慢,具体取决于您的网络速度。

要从流程中获取更多信息,您可以将其从单个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允许用户查看进度   数据通过管道,给予   时间等信息,   百分比完成(有进展   bar),当前吞吐率,总计   转移的数据和ETA。

     

要使用它,请将其插入两个进程之间的管道中   适当的选择。它的标准   输入将传递给它   标准输出和进度将是   标准错误显示。

     

pv会将每个提供的FILE依次复制到标准输出( - 表示   标准输入),或者没有FILE   指定的标准输入是   复制。这与行为相同   猫(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

你仍然需要自己弄清楚字节写入的速度(以及你剩下多少时间)。

答案 2 :(得分:0)

在另一个终端中,使用“ls -al”检查输出文件的大小,这样你就可以知道你的距离。

对于进度条,请尝试“pv”(管道查看器):http://www.catonmat.net/blog/unix-utilities-pipe-viewer/

答案 3 :(得分:0)

您可以创建更复杂的过程,以显示您正在处理的文件。它不会显示整个过程的时间,但会比你的更冗长。

for f in `ls hda1.ntfs-ptc1-img.gz.*`; do
     echo $f
     cat $f >> hda1.ntfs-ptc1.img.gz
done

答案 4 :(得分:0)

简短的回答可能是一个小时左右。

如果您在本地进行此操作并且还没有回到提示符,那么它仍在运行。如果您正在远程执行此操作,则有一些机会(取决于您是否连接到无线路由器等一系列因素)您的连接已超时。

就像其他人所说的那样,很多都依赖于加入的文件数量,无论是本地还是远程,机器上正在发生的其他进程,处理器,时钟速度和RAM等等,等等。 。

确保它正在做某事的最简单方法是打开另一个终端窗口并定期运行“ls -l /path/to/file.name”并查看输出文件是否变大。您还可以运行“top -p PID”(用实际进程ID替换PID)来使用top监视该进程,只要它仍在运行,它仍在执行某些操作。

答案 5 :(得分:0)

与Roger的答案类似,我将运行watch -n 10 "ls -l",每10秒调用一次“ls -l”,让我看看我的文件是否增长。或者我会使用watch "du -sh"

我真的不知道在文件操作期间这是否是一件“好”的事情(我猜它可能会让事情变慢一些?)但它对我有用。