复制bash中主动写入的bash文件

时间:2012-04-29 22:43:11

标签: c linux bash shell unix

我需要能够将文本文件复制到另一个位置,然后删除该文本文件的内容(不删除文件)。

目前我正在这样做:

#!/bin/bash

count=0

    for filename in `find . -name "*_list" -print`
    do
      while read -r line
      do
        echo $line 
        sync
        echo "### Trace Info ###" > log.txt
        sync
        python worker.py "$line"
        echo $line > traces/trace$count.txt
        sync
        sync
        sleep 1
        sync
        sync
        cp log.txt traces/trace$count.txt
        #cp log.txt traces/log.txt
        sync
        sleep 1
        count=$((count+1))
      done < $filename
    done

但调用同步并睡觉它对我不起作用,而是我得到这样的文件: (注意:python文件没有写入log.txt,CacheGrind是。)

CachegrindMemMod/vg-in-place --tool=cachegrind --trace-children=yes /usr/sbin/mysqld 2>log.txt

cat trace10.txt | xxd
0000000: 2323 2320 5472 6163 6520 496e 666f 2023  ### Trace Info #
0000010: 2323 0a00 0000 0000 0000 0000 0000 0000  ##..............
0000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000080: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000090: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................

此跟踪有4兆的零,应该是文本。

ls -la trace10.txt 
-rw-r--r-- 1 root root 4350121 2012-04-29 15:34 trace10.txt

我猜有一些缓存正在阻止我能够获得应计文本。任何想法都会很棒。

如果您感兴趣,该文件应包含从CacheGrind的修改版本中检索到的内存地址列表,如下所示:

Dw: 0x4916e30
Dw: 0x4916df0
Dw: 0x4916db0
Dw: 0x4916d70
Dr: 0x4916d30
Dr: 0x4916cf0
Dr: 0x4916cb0
Dr: 0x4916c70
Dr: 0x4916c30
Dr: 0x4916bf0
Dr: 0x4916bb0
Dr: 0x4916b70
Dr: 0x4916b30
Dr: 0x4916af0
Dr: 0x4916ab0

还可以找到CacheGrind的修改版本here

其他信息: 我注意到一些文件只包含标题而没有空数据。这也让我认为它是一个I / O缓存问题

1 个答案:

答案 0 :(得分:1)

谁在写这个log.txt文件? python脚本?它在后台工作吗?如果是这样,为什么要尝试复制(未完成)文件?你为什么要尝试在bash脚本中同步?

  • 扩展脚本,使其允许日志文件作为命令行参数,因此每次调用都将写入单独的文件。